Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;“不成形”;c语言中的对象#_C#_Object - Fatal编程技术网

C# &引用;“不成形”;c语言中的对象#

C# &引用;“不成形”;c语言中的对象#,c#,object,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

我正在使用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;
}
接收的对象A和B因参数不同而不同
但只传入一个对象。我希望我的问题尽可能清楚。

您提到了WCF的起源:通过
分部类向WCF类型添加接口很容易:只需声明公共接口-也许:

interface ICommon {
    string name {get;}
    // ...
}
然后告诉编译器推断每个WCF类型的接口:

namespace TheWcfNamespace {
    partial class SomeWcfType : ICommon {}
    partial class AnotherWcfType : ICommon {}
    partial class WhateverWcfType : ICommon {}
}
只要
SomeWcfType
等都有实现接口的成员,您现在就可以将所有WCF对象视为
ICommon


或者,您可以通过
dynamic
,在这里做您想做的事情-只需将
无形状的对象
替换为
dynamic
-然而,这似乎是滥用意图。这里更经典的实现是接口:

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

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

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

您提到了WCF的起源:通过
部分类
向WCF类型添加接口很容易:只需声明公共接口-也许:

interface ICommon {
    string name {get;}
    // ...
}
然后告诉编译器推断每个WCF类型的接口:

namespace TheWcfNamespace {
    partial class SomeWcfType : ICommon {}
    partial class AnotherWcfType : ICommon {}
    partial class WhateverWcfType : ICommon {}
}
只要
SomeWcfType
等都有实现接口的成员,您现在就可以将所有WCF对象视为
ICommon


或者,您可以通过
dynamic
,在这里做您想做的事情-只需将
无形状的对象
替换为
dynamic
-然而,这似乎是滥用意图。这里更经典的实现是接口:

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

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

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

您可以将它们转换为
动态
,但这将对性能产生影响

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

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

请注意,您显然会丢失静态类型。

您可以将它们转换为动态类型,但这会影响性能

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

shapeless  = received_obj_B;
if (shapeless.name = "I_dont_know_too") {
   shapeless.count--;
   shapeless.age = 20;
}
请注意,很明显,您确实丢失了静态输入。

您的意思是这样的吗

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

var b = received_obj_B;
if (b.name = "I_dont_know_too") {
   Shapeless_object.count--;
   Shapeless_object.age = 20;
}
不要在这里使用基本对象,因为您需要检查实例并尝试强制转换它

不要这样做:

object a = received_obj_A; // Here you need to cast

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

object b = received_obj_B; // Here you need to cast
if (b.name = "I_dont_know_too") {
   Shapeless_object.count--;
   Shapeless_object.age = 20;
}
你是说这个吗

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

var b = received_obj_B;
if (b.name = "I_dont_know_too") {
   Shapeless_object.count--;
   Shapeless_object.age = 20;
}
不要在这里使用基本对象,因为您需要检查实例并尝试强制转换它

不要这样做:

object a = received_obj_A; // Here you need to cast

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

object b = received_obj_B; // Here you need to cast
if (b.name = "I_dont_know_too") {
   Shapeless_object.count--;
   Shapeless_object.age = 20;
}

@用户相反:在服务器上,不需要使用
部分
,因为您可以控制原始类型;它对于生成的类型特别有用-我不想这么说,但是创建
partial class
很大程度上是为了帮助您调整生成的(WSDL等)类型(无需编辑生成的内容)哇,谢谢!你的回答太离谱了!虽然看起来是对的。动态选项似乎适合我@用户相反:在服务器上,不需要使用
部分
,因为您可以控制原始类型;它对于生成的类型特别有用-我不想这么说,但是创建
partial class
很大程度上是为了帮助您调整生成的(WSDL等)类型(无需编辑生成的内容)哇,谢谢!你的回答太离谱了!虽然看起来是对的。动态选项似乎适合我!嘿,谢谢你!它可以工作,但我需要在每次接收时都转换为
动态
。所以它是
dynamic shapeless=received\u obj\u A
动态无形状=接收对象动态
。所以它是
dynamic shapeless=received\u obj\u A
动态无形状=接收对象
@anon,如果有
var a=received\u obj\u a的选项
变量a=收到的对象B这就是答案。@n如果有
var a=received\u obj\u a
变量a=收到的对象B这就是答案。