如何创建具有 class 限制的属性

How to create attribute with class restrictions

在 C# 中有一个名为 AttributeUsage 的属性,如果您想将此属性设置为 class,它会自动检测 class 是否从属性 [=19] 派生=],否则会抛出错误。

如何创建此类限制?

我想创建一个只应 available/settable 在特定 class 上的属性。

仅通过属性 AttributeUsage 无法实现您尝试执行的操作,但可以通过其他方式实现。

AttributeUsageValidOn property, that is of AttributeTarget 类型。它允许您指定它仅在 class 上有效,但不适用于此 class.

类型

那么,为什么 AttributeUsage 只对派生自 Attribute 的 class 有效?这是编译器规则 CS0641

'attribute' : attribute is only valid on classes derived from System.Attribute

An attribute was used that can only be used on a class that derives from System.Attribute.

它不是 AttributeUsage 本身的一部分。

如果你想实现这样的目标,你需要编写你自己的 Roslyn 分析器,它会帮你检查。关于如何编写一个的教程很少,即 official one or this), I also suggest to look at roslyn-analyzers 代码,CS0641 不存在,因为它是编译器错误,而不是分析器错误,但是您可以在这里获得很多参考。

希望对你有所帮助,祝你好运!