我班上有一个通用的方法:
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)
要获取类型 的名称TEnum
,只需使用:
typeof(TEnum).Name
Run Code Online (Sandbox Code Playgroud)
请注意,这与它的枚举无关,并且不是"枚举常量",所以我认为你在这里也有一些错误的术语.