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

5

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

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

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

这个方法不能正常工作,因为Guid必须是只读的,它不能是const类型。同时,string和byte[]也应该是只读的。

有没有什么解决办法呢?

2个回答

10
这是不可能的,也永远不会成为可能(除非对.NET运行时进行重大更改),因为[Attributes]被编译为元数据,而静态变量在运行时初始化,当然前者无法访问后者(除非通过反射)。
如果标准
public const string MyGuid = "blah";

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


1
不,你可以有常量字符串。 - Mattias S
由于我上面声明的“string”是常量,它被编译到应用程序中,因此可以在“Attributes”中使用。 - Ian Kemp
所以解决方案是将字符串放入常量中,并将其作为参数传递,而不是guid,然后在属性的构造函数中实例化guid? - Stefan Steinegger
正确。因为字符串是常量,所以从该字符串构造的 Guid 也必须是常量。因此,编译时它可以正常工作。 - Ian Kemp

0

很遗憾,没有一种好的方法可以将Guid传递给属性。 唯一的解决方法是使用另一种类型并将其转换为Guid。


是的,这将很棒,但是“其他类型”会是什么呢? - Stefan Steinegger
好的,它将是字符串。但是 GUID 当然不会是类型安全的。 - Dmytrii Nagirniak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接