[英]Using the name of a generic type in a class attribute
我有一个泛型类,需要在类属性中使用其类型参数之一的名称。 我不知道如何在该上下文中访问类名
我尝试过使用typeof(TMsg).Name
但VS显示错误说
属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式
目前我的代码如下所示:
[MessageBase(typeof(TMsg).Name)]
public abstract class DDSMessageAbstract<TMsg/*, TReader, TWriter, TMsgBase, TSupport*/> : MessageBaseForDDS
where TMsg : new()
...
我的问题是,有没有办法让我使用TMsg
的实际名称,还是我必须为每个继承类定义这个属性?
简短的回答可能是你做不到。
首先,泛型是针对您的类而不是您的属性。 所以你不能使用
MessageBase(typeof(TMsg)
attributes
值仅限于简单类型; 例如,基本常量(包括字符串)和typeof
。
来自ECMA 334v4:
§24.1.3属性参数类型
属性类的位置和命名参数的类型仅限于属性参数类型 ,它们是:
- 以下类型之一:
bool
,byte
,char
,double
,float
,int
,long
,short
,string
。- 类型
object
。- 类型
System.Type
。- 枚举类型,前提是它具有公共可访问性,并且嵌套类型(如果有)也具有公共可访问性。
- 上述类型的一维阵列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.