gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:51:39 25 4
gpt4 key购买 nike

我有一个泛型类,它需要在类属性中使用其类型参数之一的名称。我不知道如何在该上下文中访问类名

我试过使用 typeof(TMsg).Name 但 VS 显示错误

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

目前我的代码是这样的:

[MessageBase(typeof(TMsg).Name)]
public abstract class DDSMessageAbstract<TMsg/*, TReader, TWriter, TMsgBase, TSupport*/> : MessageBaseForDDS
where TMsg : new()
...

我的问题是,有没有办法让我使用 TMsg 的实际名称,或者我是否必须为每个继承类定义此属性?

最佳答案

简短的回答可能是你不能那样做。

首先,泛型适用于您的类而不是您的属性。所以你不能使用

MessageBase(typeof(TMsg)

属性中的值仅限于简单类型;例如,基本常量(包括字符串)和 typeof

来自 ECMA 334v4:

§24.1.3 Attribute parameter types

The types of positional and named parameters for an attribute class are limited to the attribute parameter types, which are:

  • One of the following types: bool, byte, char, double, float, int, long, short, string.
  • The type object.
  • The type System.Type.
  • An enum type, provided it has public accessibility and the types in which it is nested (if any) also have public accessibility.
  • Single-dimensional arrays of the above types.

ECMA-334

关于c# - 在类属性中使用泛型类型的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56564398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com