gpt4 book ai didi

c# - 如果多个成员具有相同的属性,如何抛出编译器错误

转载 作者:可可西里 更新时间:2023-11-01 03:13:40 25 4
gpt4 key购买 nike

简单的问题,如何强制 C# 编译器抛出编译错误。


更新:也许改用 Assert.Fail() 会更好?

我有一个自定义属性,它应该只应用于一个类的一个成员。在我的另一个类的静态方法中,它会查找那个成员,如果不止一个成员应用了该属性,我希望它失败(不抛出异常)。

public class Foo
{
[MyCustomAttribute]
public String FooString { get; set; }

[MyCustomAttribute]
public String OtherFooString { get; set; }
}


public class Bar<T>
where T : class, new()
{
static Bar()
{
//If more than one member of type Foo has MyCustomAttribute
//applied to it compile error or Assert.Fail()?
}
}

最佳答案

您可以使用诊断指令:

#error Oops. This is an error.

或者只是一个警告:

#warning This is just a warning.

您通常希望将这些放在条件 block 中,我希望...

编辑:好的,现在您已经更新了您的问题,您根本无法在编译时执行此操作。您关于使用 Assert.Fail 的建议将问题推到了执行时间上。

我建议您编写单元测试来检测这一点(遍历程序集中的所有类型,并检查每个类型最多只应用一次属性)。

编辑:在 2016 年......虽然 OP 建议的代码分析实际上不是编译器错误,但现在 Visual Studio 使用 Roslyn,挂接到编译器并真正获得来自编译器的错误,使用 Roslyn 代码分析器。但是,我仍然个人更喜欢对此进行单元测试,因为这样代码就可以由任何人构建和测试,无论他们是否安装了 Roslyn 分析器。仍然无法使用“纯 Vanilla ”C# 编译器验证这一点。

关于c# - 如果多个成员具有相同的属性,如何抛出编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6266031/

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