gpt4 book ai didi

c# - 我可以将自定义属性限制为仅无效方法吗?

转载 作者:太空狗 更新时间:2023-10-29 17:50:34 25 4
gpt4 key购买 nike

我有一个自定义属性,我想将其限制为返回类型为 void 的方法。

我知道我可以使用 [AttributeUsage(AttributeTargets.Method)] 限制方法,但似乎没有办法限制方法签名的返回类型或任何其他方面。

[System.Diagnostics.Conditional] 属性具有我想要的那种限制。将其添加到非 void 方法会导致编译器错误:

The Conditional attribute is not valid on '(SomeMethod)' because its return type is not void

IntelliSense 说:

Attribute 'System.Diagnostics.ConditionalAttribute' is only valid on attribute classes or methods with 'void' return type.

如果我按 F12 到 ConditionalAttribute,我会看到它装饰有以下属性:

[Serializable]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
[ComVisible(true)]

其中没有任何关于返回类型的内容。

Conditional 属性是如何完成的?我可以为我的自定义属性做同样的事情吗?

最佳答案

由于我使用的是 PostSharp,所以在我的特殊情况下有一个解决方案。

我的自定义属性继承自 PostSharp.Aspects.MethodInterceptionAspect(继承自 Attribute),它具有可重写的 CompileTimeValidate(MethodBase method) 方法.

这允许在构建期间发出编译器错误:

public override bool CompileTimeValidate(MethodBase method)
{
Debug.Assert(method is MethodInfo);
var methodInfo = (MethodInfo)method;

if (methodInfo.ReturnType != typeof(void))
{
Message.Write(
method, SeverityType.Error, "CX0001",
"The Foo attribute is not valid on '{0}' because its return type is not void",
method.Name);

return false;
}

return true;
}

关于c# - 我可以将自定义属性限制为仅无效方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30126339/

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