Kể từ khi liệt kê sử dụng số nguyên, những gì cấu trúc khác mà tôi có thể sử dụng để cung cấp cho tôi quyền truy cập enum giống như với giá trị gắn liền với tên:Liệt kê với kiểu trả về không phải là chuỗi?
[Tôi biết điều này là sai, tìm kiếm thay thế]
private enum Project
{
Cleanup = new Guid("2ED3164-BB48-499B-86C4-A2B1114BF1"),
Maintenance = new Guid("39D31D4-28EC-4832-827B-A11129EB2"),
Upgrade = new Guid("892F865-E38D-46D7-809A-49510111C1"),
Sales = new Guid("A5690E7-1111-4AFB-B44D-1DF3AD66D435"),
Replacement = new Guid("11E5CBA2-EDDE-4ECA-BDFD-63BDBA725C8C"),
Modem = new Guid("6F686C73-504B-111-9A0B-850C26FDB25F"),
Audit = new Guid("30558C7-66D9-4189-9BD9-2B87D11190"),
Queries = new Guid("9985242-516A-4151-B7DD-851112F562")
}
CHỈNH SỬA 2014-07-20
Đây là câu trả lời mới hơn cho câu hỏi này. Sử dụng lớp Attribute với một phương thức trợ giúp, xác định các thuộc tính phụ cần thiết trên enum của bạn.
public enum MultiValueEnum
{
[FooAttribute("alpha", 20d, true)]
First,
[FooAttribute("beta", 40.91d, false)]
Second,
[FooAttribute("gamma", 1.2d, false)]
Third,
}
public class FooAttribute : Attribute
{
internal FooAttribute(string name, double percentage, bool isGood)
{
this.Name = name;
this.Percentage = (decimal)percentage;
this.IsGood = isGood;
}
public string Name { get; private set; }
public decimal Percentage { get; private set; }
public bool IsGood { get; private set; }
}
public static TAttribute GetAttribute<TAttribute>(this Enum value)
where TAttribute : Attribute
{
var type = value.GetType();
var name = Enum.GetName(type, value);
return type.GetField(name)
.GetCustomAttributes(false)
.OfType<TAttribute>()
.SingleOrDefault();
}
Mà làm cho nó dễ dàng này:
MultiValueEnum enumVar = MultiValueEnum.First;
var enumStringValue = enumVar.GetAttribute<FooAttribute>().Name;
var enumValueDecimal = enumVar.GetAttribute<FooAttribute>().Percentage;
var enumBool = enumVar.GetAttribute<FooAttribute>().IsGood;
Giải pháp này sẽ không xây dựng cho tôi. Tuy nhiên, nếu bạn thay đổi hàm tạo trên EnumGuid để lấy chuỗi và sau đó tạo ra các guid từ chuỗi này nó sẽ. lớp công khai EnumGuid: Thuộc tính { công khai Guid Guid {get; bộ tư nhân; } công khai EnumGuid (Chuỗi s) { this.Guid = Guid.Parse (s); } } – Drauka
Vâng, có vẻ như bạn phải sử dụng các kiểu nguyên thủy cho các nhà xây dựng enum, xem: http://stackoverflow.com/questions/25859094/an-attribute-argument-must-be-a-constant-expression-create- a-thuộc tính-của. Tuy nhiên như đã nêu bởi @ Druaka, chuyển đổi một chuỗi thành một Guid bên trong constructor và tất cả đều tốt. – puddinman13