mới và câu trả lời tốt hơn
Tất nhiên, ColorConverter là con đường để đi. Gọi ColorConverter.ConvertFromString và truyền kết quả. Phải thừa nhận rằng điều này sẽ liên quan đến quyền anh. Nếu bạn muốn tránh boxing, hãy xây dựng một từ điển để bắt đầu với các tên chuẩn (vẫn sử dụng ColorConverter) và sau đó sử dụng từ điển để tra cứu sau này.
câu trả lời gốc
Bạn có thể khá dễ dàng lấy tên và giá trị tài sản từ System.Windows.Media.Colors một lần vào bản đồ:
private static readonly Dictionary<string, Color> KnownColors = FetchColors();
public static Color FromName(string name)
{
return KnownColors[name];
}
private static Dictionary<string, Color> FetchColors()
{
// This could be simplified with LINQ.
Dictionary<string, Color> ret = new Dictionary<string, Color>();
foreach (PropertyInfo property in typeof(Colors).GetProperties())
{
ret[property.Name] = (Color) property.GetValue(null);
}
return ret;
}
Đó là một chút xấu xí, nhưng đó là một hit một lần.
Nguồn
2009-03-23 11:20:46
AFAIK, trong C# bạn có thể làm điều này bằng Enum.Parse (typeof (MyEnumType), "Red") có lẽ đó có thể giúp với một hướng? – scraimer