C #: статический Guid в качестве аргумента атрибута - PullRequest
4 голосов
/ 18 сентября 2009

Как я могу использовать статический Guid в качестве аргумента в атрибуте?

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

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

Это не работает, потому что Guid должен быть только для чтения, он не может быть постоянным. Строковое и byte [] представление также будет доступно только для чтения.

Есть ли обходной путь для этого?

Ответы [ 2 ]

9 голосов
/ 18 сентября 2009

Это невозможно и никогда не будет возможно, потому что [Attributes] скомпилированы как метаданные, а static переменные инициализируются во время выполнения, и, конечно, первое не может получить доступ ко второму (кроме как через Reflection).

Если стандарт

public const string MyGuid = "blah";

не будет работать для вас, тогда AFAIK единственный способ достичь того, чего вы хотите, это с помощью Reflection.

0 голосов
/ 18 сентября 2009

К сожалению, нет хорошего способа передать Guid атрибуту. Единственный обходной путь - использовать для этого другой тип и преобразовать его в Guid.

...