C# 如何将泛型枚举传递给方法并将其设置为方法内部的动态对象

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

我有大约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 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多个变体。不,每周只调用几次,但如果只传递某种泛型,会不会更容易?我对泛型没有太多的经验,但这似乎是最好的解决方案,但我不知道该怎么做!比如说,如果我把它作为一个动态输入呢?在我的答案中添加了一个替代选项。