C#:静态 Guid 作为属性的参数

问题描述 投票:0回答:2

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

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

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

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

有什么解决办法吗?

c# attributes constants guid
2个回答
10
投票

这是不可能的,也永远不可能(除非对 .NET 运行时进行重大更改),因为

[Attributes]
被编译为元数据,而
static
变量在运行时初始化,当然前者无法访问后者(除非通过反思)。

如果符合标准

public const string MyGuid = "blah";

对你不起作用,那么据我所知,实现你想要的唯一方法就是使用反射。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.