繁体   English   中英

在类属性中使用泛型类型的名称

[英]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属性参数类型

属性类的位置和命名参数的类型仅限于属性参数类型 ,它们是:

  • 以下类型之一: boolbytechardoublefloatintlongshortstring
  • 类型object
  • 类型System.Type
  • 枚举类型,前提是它具有公共可访问性,并且嵌套类型(如果有)也具有公共可访问性。
  • 上述类型的一维阵列。

ECMA-334

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM