【问题标题】:C#: static Guid as argument of an attributeC#:静态 Guid 作为属性的参数
【发布时间】:2009-09-18 10:00:49
【问题描述】:

如何在属性中使用静态 Guid 作为参数?

static class X
{
  public static readonly Guid XyId = new Guid("---");
}

[MyAttribute(X.XyId)] // does not work
public class myClass
{
}

它不起作用,因为 Guid 必须是只读的,它不能是 const。字符串和字节[] 表示也将是只读的。

有什么解决方法吗?

【问题讨论】:

    标签: c# attributes constants guid


    【解决方案1】:

    这是不可能的,也永远不可能,因为[Attributes]被编译为元数据,static变量在运行时被初始化,当然前者不能访问后者(通过反射除外)。

    如果标准

    public const string MyGuid = "blah";
    

    不会为您工作,那么 AFAIK 实现您想要的唯一方法就是使用反射。

    【讨论】:

    • 不,你可以有 const 字符串。
    • 由于我在上面声明的string 是常量,它被编译到应用程序中,因此可以在Attributes 中使用。
    • 所以解决方法是将字符串放入一个const中,而不是guid作为参数传递,然后在属性的构造函数中实例化guid?
    • 正确。因为字符串是常量,所以从该字符串构造的 Guid 也必须是常量。因此,这一切在编译时都可以正常运行。
    【解决方案2】:

    不幸的是,没有将 Guid 传递给属性的好方法。 唯一的解决方法是为此使用另一种类型并将其转换为 Guid。

    【讨论】:

    • 是的,这很好,但它会是什么“其他类型”?
    • 嗯,应该是字符串。当然,GUID 不是类型安全的。
    猜你喜欢
    • 1970-01-01
    • 2011-01-05
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多