如何在泛型方法中获取类型参数的名称?

时间:2015-01-27 22:29:55

标签: c# generics types

我班上有一个通用方法:

public static void populateSoapBody<TEnum>(Object obj, string[] aMessage) 
   where TEnum : struct,  IComparable, IFormattable, IConvertible

然后我用它来填充字符串数组obj中的类aMessage(在我的另一个问题中详细为here)...

现在,对于错误日志记录,我想获取为TEnum类型参数传入的类型参数的名称。例如:

private enum DCSSCutomerUpdate_V3
{
       ...
}

所以,当我这样调用这个方法时:

Common.populateSoapBody<DCSSCustomerUpdate_V3>(wsSoapBody, aMessage);

在该方法中,我希望能够将DCSSCustomerUpdate_V3作为字符串

2 个答案:

答案 0 :(得分:12)

  

我想要实际常数的名称。

obj.ToString()
如果obj是枚举类型的盒装实例,

将为您提供枚举元素的名称。例如:

class P
{
  enum E { ABC } 
  static void Main()
  {
     object obj = E.ABC;
     Console.WriteLine(obj.ToString()); // ABC
  }
}
  

我想要在调用时传入的Enumerated常量的名称。所以,由TEnum定义,所以当我使用Common.populateSoapBody<DCSSCustomerUpdate_V3>(wsSoapBody, aMessage);调用方法时,我可以得到字符串DCSSCustomerUpdate_V3

这不是常量。如果您使用正确的名称,那么对于您自己和试图帮助您的人来说,您会更轻松。

E.ABC上面是常量E类型。在您的示例中,TEnum类型参数,类型DCSSCustomerUpdate_V3类型参数

因此,您的问题是:

  

我有一个通用方法M<T>();如何获取为类型参数T提供的类型参数的名称?

答案是:

void M<T>()
{
    Console.WriteLine(typeof(T).Name);
}

答案 1 :(得分:5)

要获取类型 TEnum的名称,只需使用:

typeof(TEnum).Name

请注意,这与它的枚举无关,并且不是“枚举常量”,所以我认为你在这里也有一些错误的术语。