如何将 GUID 作为属性参数?

2024-03-30

我需要某个属性类中的 Guid 属性,如下所示:

public class SomeAttribute : Attribute {
    private Guid foreignIdentificator;
    public Guid ForeignIdentificator {
        get { return this.foreignIdentificator; }
        set { this.foreignIdentificator = value; }
    }
}

但在属性定义中,我只能使用基本类型,它们是常量(我明白为什么,这让我有意义)。解决方法可以是将“ForeignIdentificator”定义为字符串,并在运行时创建 Guid:

public class SomeAttribute : Attribute {
    private string foreignIdentificator;
    public string ForeignIdentificator {
        get { return this.foreignIdentificator; }
        set { this.foreignIdentificator = value; }
    }
    public Guid ForeignIdentificatorGuid {
        get { return new Guid( ForeignIdentificator ); }
    }
}

不幸的是我放松了类型安全检查。 “ForeignIdentificator”属性可以包含任何字符串值,并且在创建 Guid 期间将在运行时而不是编译时抛出异常。

我知道编译器检查“System.Runtime.InteropServices.GuidAttribute”的字符串值是否为“Guid 兼容性”。这个检查正是我所需要的,但我不知道这个检查是否在编译器中硬编码,或者我可以明确定义(以及如何定义)。

您知道如何确保属性的“Uuid 兼容性”检查吗?或者另一种方式,如何在属性中达到类型安全的 Guid 定义? 谢谢。


我过去遇到过你的确切问题。我们只是要求他们以字符串形式传递 GUID...VS GUID 生成器工具为我们提供的默认方式 (*F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4)。我们基本上做了你所做的事情。我们在插件架构中使用它,因此我们的客户一直是使用该界面的人。如果你看看微软在需要做同样的事情时所做的事情,他们就会这样做。

这样做本来就没有问题。我们从来没有将其视为现场问题。

不过,您可能希望将该字符串字段命名为 GUID,以免让您的消费者感到困惑。添加一些文档,以防他们不知道需要采用什么格式。

当我看到这个时,我也有同样的反应……但后来我继续前进,因为似乎没有类型安全的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 GUID 作为属性参数? 的相关文章

随机推荐