c# - c# 中的 "Shapeless"对象

标签 c# object

我正在使用 wcf 接收对象,每个对象都是不同的,我不想为每个接收到的对象创建一个对象以便我可以操作它,每次将每个接收到的对象传递/复制到一个无形对象。有这种东西吗?

伪代码示例:

Shapeless_object = received_obj_A;
if (Shapeless_object.name = "I_dont_know") {
   Shapeless_object.count++;
}

Shapeless_object = received_obj_B;
if (Shapeless_object.name = "I_dont_know_too") {
   Shapeless_object.count--;
   Shapeless_object.age = 20;
}

received_obj_A和B不同,参数不同 但传入了一个对象。我希望我的问题尽可能清楚。

最佳答案

您提到了 WCF 的起源:通过 partial class 向 WCF 类型添加接口(interface)很容易:只需声明通用接口(interface) - 也许:

interface ICommon {
    string name {get;}
    // ...
}

然后告诉编译器为每个 WCF 类型推断接口(interface):

namespace TheWcfNamespace {
    partial class SomeWcfType : ICommon {}
    partial class AnotherWcfType : ICommon {}
    partial class WhateverWcfType : ICommon {}
}

只要 SomeWcfType 等所有具有实现接口(interface)的成员,您现在就可以将所有 WCF 对象视为 ICommon


或者,您可以通过 dynamic 在这里做您想做的事 - 只需将 Shapeless_object 替换为 dynamic - 然而,这似乎是一个滥用的意图。这里更经典的实现是接口(interface):

if(obj is IDontKnow) {
   // TODO: access as an IDontKnow
}

if (obj is IDontKnowToo) {
    // TODO: access as an IDontKnowToo
}

您当然可以将其与上面提到的部分类方法结合起来。

关于c# - c# 中的 "Shapeless"对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29406856/

相关文章:

php - 如何随机化 PHP 中的对象数组?

c# - 使用 C# 执行命令行

c# - MVC3 路由奇怪的行为

c# - 无法从登录屏幕打开内存映射文件

c# - 有没有办法让 Resharper 像对待 Debug.Assert 一样对待 Trace.Assert?

c# - float * 是什么意思?

c# - 如何检查ArrayList中对象的类型

python - 只初始化一次类变量

c++ - 动态创建对象指针数组

javascript - 将键值对添加到 javascript 中的对象数组?