我需要获取当前类中的类的名称。问题是我处于静态属性中。任何想法如何我可以做到这一点没有参考this
?获取C类中的类名#
3
A
回答
7
如果你真的想要的话,虽然作为TomTom公司指出,你可能不会需要它:
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name
1
如果你是一个静态属性,你应该能够使类型名称的常量。
如果您在继承基类中有一个静态属性,并且您试图确定您所在的子类的类型,则无法使用静态属性执行此操作。原因是静态属性与基类类型相关联,而不是任何基类实例。改为使用常规属性,并使用GetType(),名称或类似名称。
1
以下调用应该给你当前类型的名称...
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name
1
您可以使用类似:
public static class MyClass
{
public static string FullName
{
get { return typeof(MyClass).FullName; }
}
}
3
System.Reflection.MethodInfo.GetCurrentMethod().DeclaringType.Name
0
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString()
这是一遍又一遍地提到 如果类型是通用的,则可能会出错。它不会计算出通用类型。
class Generic<T>
{
public static string ClassName
{
[MethodImpl(MethodImplOptions.NoInlining)]
get
{
return System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString();
}
}
}
此外,如果你不使用NoInlining
指令代码,也许联到调用点,这将肯定不会得到你之后的结果。 以下代码将打印Generic``1[T]
,而不是从中调用它的特定实例。 解决方案相当明显,只需使用MakeGenericMethod
和T即可获得正确的实例。
0
解决方案是相当明显的只是使用MakeGenericMethod与T来获得正确的实例。
但是,如果您想知道T的名称,则不能使用MakeGenericMethod
。另一种解决方案是增加一个静态类,泛型方法:打电话
public static class Helper
{
public static string GetName<T>()
{
Type type = typeof(T);
Type[] genericArguments = type.GetGenericArguments();
return string.Format("{0}<{1}>", type.Name, string.Join(",", genericArguments.Select(arg => arg.Name)));
}
}
无变化财产ClassName
到
public static string ClassName
{
get
{
return Helper.GetName<Generic<T>>();
}
}
,那么你将得到正确的通用名称,例如Generic<DateTime>.ClassName
将返回 “Generic`1 <DateTime>”。
相关问题
- 1. 可能在c#中获取别名类型的类型?
- 2. 如何从C派生类中获取基类的名称
- 3. C#从类的名称获取枚举
- 4. 从类中获取包名
- 5. 从父类中获取对象类名?
- 6. 从扩展类中获取类名称
- 7. 获取子类名?
- 8. staticmethod:获取类名?
- 9. C#获取页面类型名称?
- 10. C#获取泛型类型名称
- 11. 获取类模板的类型名称
- 12. 获取基类的名字?
- 13. C#获取一类
- 14. Rails:获取父类方法中子类的类名称
- 15. 从C#中的类中获取所有属性名称
- 16. 获取JSTL中数组的类名称
- 17. 获取包中的类名列表
- 18. 通过类名获取类属性作为字符串在C#
- 19. 如何获取C#中的类型的原始名称?
- 20. 以C#中字符串的形式获取类的名称
- 21. Java:从匿名类获取超类
- 22. 从父类获取子类名称
- 23. 获取类名称函数的名称
- 24. Parse.com:获取Parse.Object类名称
- 25. 获取类名称+继承
- 26. jQuery按类名获取ID
- 27. 从接口获取类名
- 28. jQuery SerializeArray/Param获取类名?
- 29. 如何获取类名?
- 30. jQuery。获取标记+类名
为什么你关心它是一个常量每个定义 - 静态属性不会继承下来的类。所以它总是完全一样的回报。 – TomTom
@TomTom:它可能是一个泛型类,所以人们可能想知道泛型参数的值是什么。不同通用参数的名称可以被认为是不同的名称。 – Vlad