[英]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.