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

Our*_*nas 0 c# generics types

我班上有一个通用的方法:

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

然后,我用它来填充类obj从字符串数组aMessage(详见这里在我的其他问题)...

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

private enum DCSSCutomerUpdate_V3
{
       ...
}
Run Code Online (Sandbox Code Playgroud)

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

Common.populateSoapBody<DCSSCustomerUpdate_V3>(wsSoapBody, aMessage);
Run Code Online (Sandbox Code Playgroud)

在那个方法中,我希望能够得到DCSSCustomerUpdate_V3一个字符串

Eri*_*ert 12

我想要实际常量的名称.

obj.ToString()
Run Code Online (Sandbox Code Playgroud)

如果obj是枚举类型的盒装实例,则为您提供枚举元素的名称.例如:

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

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

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

E.ABC以上是一个常数.E是一种类型.在您的示例中TEnum类型参数,类型DCSSCustomerUpdate_V3类型参数.

因此,你的问题是:

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

答案是:

void M<T>()
{
    Console.WriteLine(typeof(T).Name);
}
Run Code Online (Sandbox Code Playgroud)


Bra*_*NET 5

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

typeof(TEnum).Name
Run Code Online (Sandbox Code Playgroud)

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