Memories
- это тип, а не поле, поэтому вам нужно сделать что-то вроде этого:
public static string EnumSize<T>() where T : struct, Enum
{
EnumSizeAttribute attribute = typeof(T).GetCustomAttribute<EnumSizeAttribute>();
return attribute?.Value.ToString();
}
И использовать следующим образом:
string size = EnumSize<Memories>();
Вы не будете быть в состоянии вызвать это как метод расширения, как у вас с MemSize
.
Единственный способ сделать это - расширить Type
, например:
public static string EnumSize(this Type type)
{
EnumSizeAttribute attribute = type.GetCustomAttribute<EnumSizeAttribute>();
return attribute?.Value.ToString();
}
string size = Memories.EnumSize();
Но это будет доступно для использования со всеми типами, а не только с перечислениями, что, вероятно, не то, что вам нужно.
Конечно, вы можете вызвать исключение, если оно используется неправильно:
public static string EnumSize(this Type type)
{
if (!type.IsEnum)
{
throw new InvalidOperationException("EnumSize only applies to enums");
}
EnumSizeAttribute attribute = type.GetCustomAttribute<EnumSizeAttribute>();
return attribute?.Value.ToString();
}
Но я бы, наверное, остановился на первом примере.