Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在泛型方法中获取类型参数的名称?_C#_Generics_Types - Fatal编程技术网

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

C# 如何在泛型方法中获取类型参数的名称?,c#,generics,types,C#,Generics,Types,我的类中有一个泛型方法: public static void populateSoapBody<TEnum>(Object obj, string[] aMessage) where TEnum : struct, IComparable, IFormattable, IConvertible 所以,当我这样调用方法时: Common.populateSoapBody<DCSSCustomerUpdate_V3>(wsSoapBody, aMessage);

我的类中有一个泛型方法:

public static void populateSoapBody<TEnum>(Object obj, string[] aMessage) 
   where TEnum : struct,  IComparable, IFormattable, IConvertible
所以,当我这样调用方法时:

Common.populateSoapBody<DCSSCustomerUpdate_V3>(wsSoapBody, aMessage);
Common.populatesoapody(wsSoapBody,aMessage);
在该方法中,我希望能够以字符串形式获取
DCSSCustomerUpdate\u V3

我想要实际常数的名称

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

private enum DCSSCutomerUpdate_V3
{
       ...
}
class P
{
  enum E { ABC } 
  static void Main()
  {
     object obj = E.ABC;
     Console.WriteLine(obj.ToString()); // ABC
  }
}
我想要调用时传入的枚举常量的名称。因此,由
TEnum
So定义,当我使用
Common.populatesoapody(wsSoapBody,aMessage)调用该方法时我可以获取字符串
DCSSCustomerUpdate\u V3

这不是一个常数。如果你对事物使用正确的名称,你将使自己和试图帮助你的人都变得容易

E.ABC
以上是一个常数<代码>E
是一种类型。在您的示例中,
TEnum
是一个类型参数,而type
DCSSCustomerUpdate\u V3
是一个类型参数

因此,你的问题是:

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

答案是:

void M<T>()
{
    Console.WriteLine(typeof(T).Name);
}
void M()
{
Console.WriteLine(typeof(T).Name);
}
要获取类型的名称,只需使用:

typeof(TEnum).Name

请注意,这与它是一个枚举,而不是一个“枚举常量”这一事实无关,因此我认为您在这里也有一些术语错误。

typeof(TEnum)有什么问题.FullName?如果你在任何参数中都不使用它,那么
有什么用呢?我更感兴趣的是,为什么OP没有先尝试尝试尝试尝试就提出了这个问题。在这种情况下,你应该看看@BradleyDotNET的答案或更具体的
类型(TEnum).Name
。你说要澄清,但你重复了同样的事情。您应该指定您想要
TEnum
的名称。对不起,Eric,我想要调用它时传入的枚举常量的名称。因此,由
TEnum
定义,因此当我使用
Common.populatesoapody(wsSoapBody,aMessage)
调用该方法时;我可以获取字符串DCSSCustomerUpdate_V3@Eric利珀特:是的,你是对的,我没有意识到这是一种。。感谢您的解释我编辑了我的问题以提供更多信息感谢您的解释-我想我来自VB6并在工作中学习了c#我还没有在类型方面有一个良好的基础…它在调用类中定义为枚举,如下所示:
private Enum DCSSCustomerUpdate\u V3{instit=8,
@OurManInBananas这并不意味着这里的代码与此有关。请参阅Eric的答案,了解正确的术语。
typeof(TEnum).Name