C#:确保参数具有属性

时间:2010-05-16 20:14:39

标签: c# parameters attributes

我有一个属性让我们调用它SomeAttribute和一个类我需要确保该类传递一个具有SomeAttribute的类型。这就是我现在这样做的方式:

public class Test()
{
    public Test(SomeType obj)
    {
        if(!obj.GetType().IsDefined(typeof(SomeAttribute), false))
        {
            throw new ArgumentException("Errormessage");
        }
    }
}

但这意味着我在编译时没有得到任何错误,但在运行时某处,如果obj没有该属性。有没有办法在方法声明中指定参数必须具有某些属性?所以我在使用错误的参数时编译错误,或者我必须使用空接口?

2 个答案:

答案 0 :(得分:3)

在编译时无法强制执行属性。您可能想重新考虑您的设计 - 通常属性更多地是关于元数据,而不是关于运行时行为。

NDepend's Code Query Language是一个静态的分析工具,可能可能检测到违规行为 - 但是如果您还没有使用NDepend,我会犹豫是否只为此要求包含它。< / p>

然后再次缺乏你想做的事情的背景 - 它有点像solving the other half your problem

答案 1 :(得分:1)

不,没有办法要求属性 - 但是你总是可以编写单元测试来扫描你的程序集并检查是否已经应用了相应的属性 - 假设你可以实际检测到这个要求。

虽然听起来有点奇怪 - 你能否提供一些关于你为什么使用这个方案的更多细节?也许另一种方法更合适,例如描述您感兴趣的额外数据的另一个参数。