我班上有一个通用方法:
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
作为字符串
答案 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
请注意,这与它的枚举无关,并且不是“枚举常量”,所以我认为你在这里也有一些错误的术语。