C# &引用;“不成形”;c语言中的对象#
我正在使用wcf接收对象,每个对象都是不同的,我希望每次只将每个接收对象传递/复制到一个未成形对象,而不是为每个接收对象创建一个对象,以便对其进行操作。有这样的事吗 伪代码示例: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
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代码>这就是答案。