C#:确保参数具有属性

标签 c# parameters attributes

我有一个属性,让我们称之为 SomeAttribute 和一个类,我需要确保该类传递了一个具有 SomeAttribute 的类型。所以我现在就是这样做的:

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

但这意味着如果 obj 没有该属性,我在编译时不会收到任何错误,但在运行时某处会出现错误。有没有办法在方法声明中指定参数必须具有某些属性?所以我在使用错误参数时编译时会出错,还是必须使用空接口(interface)?

最佳答案

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

NDepend's Code Query Language是一种静态分析工具,可能 可以检测违规行为 - 但如果您还没有使用 NDepend,我会犹豫是否单独将其包含在这个要求中。

再一次,缺乏你想做的事情的背景 - 这有点像 solving the other half your problem .

关于C#:确保参数具有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2845287/

相关文章:

javascript - attr() 和 val() 有可用的 += 吗?

c# - 根据类属性引发警告

python - 'Button' 对象没有属性 'prep_msg'

c# - 在 C# 应用程序中使用 SQL 的最简单方法?

c# - 强制函数返回值并使编译错误 C#

javascript - 重定向到页面并传递文本和图像参数 - HTML JS

ruby-on-rails - 如何在 Rails 中提交 boolean 参数?

PowerShell - 访问从 Windows cmd shell 发送的脚本参数

c# - 为隐式调度方法显式指定 TaskScheduler

c# - 请求的 URL 的文件扩展名没有配置处理程序来处理 Web 服务器上的请求