繁体   English   中英

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

[英]How do I get the name of a type argument in a generic method?

我在课堂上有一个通用方法:

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

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

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

private enum DCSSCutomerUpdate_V3
{
       ...
}

因此,当我这样调用方法时:

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

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

我想要实际常数的名称。

obj.ToString()

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

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

我想要在调用它时传递的枚举常量的名称。 因此,由TEnum定义,因此当我使用Common.populateSoapBody<DCSSCustomerUpdate_V3>(wsSoapBody, aMessage);调用该方法时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);
}

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

typeof(TEnum).Name

请注意,这与它的一个枚举无关,并且不是“枚举常量”,因此,我认为您在此处也存在一些术语错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM