C# 如何将泛型枚举传递给方法并将其设置为方法内部的动态对象
我有大约20多个相同的枚举,但它们来自不同的web服务库,所以当使用它们时,它们都需要完全的名称空间引用,如下所示C# 如何将泛型枚举传递给方法并将其设置为方法内部的动态对象,c#,generics,dynamic,enums,C#,Generics,Dynamic,Enums,我有大约20多个相同的枚举,但它们来自不同的web服务库,所以当使用它们时,它们都需要完全的名称空间引用,如下所示 public enum yesnounspecified { unspecified, yes, no, } WebServices\u Production\u TrustOnline\u ARM.yes未指定 WebServices\u Development\u TrustOnline\u ARM.yes未指定 WebServices\u Produ
public enum yesnounspecified
{
unspecified,
yes,
no,
}
WebServices\u Production\u TrustOnline\u ARM.yes未指定
WebServices\u Development\u TrustOnline\u ARM.yes未指定
WebServices\u Production\u TrustOnline\u BW.Yes未指定
Web服务\u开发\u在线信任\u BW.yesnounspecified
等
等高达20+
其中每个枚举如下所示
public enum yesnounspecified
{
unspecified,
yes,
no,
}
在我的方法中,我设置了动态对象的所有值,也设置了来自每个不同web服务的值
我需要能够将枚举设置为yes/no,但不确定如何传入和使用它
ex.
MyMethod("something", new WebServices_Production_TrustOnline_ARM.objectToFill());
public void MyMethod(string otherParam, dynamic someObject) {
// 'cigarettes' is a 'yesnospecified' enum
someObject.cigarettes = // need to set the enum value (yes/no) here but not sure how to pass it in and set it
}
使用反射
这将使用反射获取有关属性的信息,包括枚举类型。然后,可以使用Enum.ParseenumType、string或Enum.ToObjectenumType、intValue构造此类型的值。SetValue将构造的值写入属性
使用泛型
另一种方法(如果该值是固定的)是将该方法设置为泛型,并将枚举值传递给该方法:
public void MyMethod<T>(string otherParam, dynamic someObject, T value)
{
someObject.cigarettes = value;
}
调用:MyMethodx,obj,yesnounspecified.yes 它们都有相同的整数值吗?是的,没有具体说明;是的,我相信是这样的,因为它们实际上都没有指定任何int值。它们在web服务文件中,正如我在示例中所示,只有名称,没有int值specified@user1186050您想从枚举中设置someObject.com=是/否…对吗?如果我错了,请更正,这将实际从动态对象中提取枚举?这样我就可以用它了?是的,可以。性能将不是最好的,因此如果您经常调用此方法,最好编写20多个变体。不,每周只调用几次,但如果只传递某种泛型,会不会更容易?我对泛型没有太多的经验,但这似乎是最好的解决方案,但我不知道该怎么做!比如说,如果我把它作为一个动态输入呢?在我的答案中添加了一个替代选项。