FYI Đây là một ví dụ tuyệt vời của một phương pháp Enum mở rộng mà tôi đã có thể sử dụng. Nó thực hiện một trường hợp chức năng TryParse() không nhạy cảm đối với sự đếm:
public static class ExtensionMethods
{
public static bool TryParse<T>(this Enum theEnum, string strType,
out T result)
{
string strTypeFixed = strType.Replace(' ', '_');
if (Enum.IsDefined(typeof(T), strTypeFixed))
{
result = (T)Enum.Parse(typeof(T), strTypeFixed, true);
return true;
}
else
{
foreach (string value in Enum.GetNames(typeof(T)))
{
if (value.Equals(strTypeFixed,
StringComparison.OrdinalIgnoreCase))
{
result = (T)Enum.Parse(typeof(T), value);
return true;
}
}
result = default(T);
return false;
}
}
}
Bạn sẽ sử dụng nó theo cách sau đây:
public enum TestEnum
{
A,
B,
C
}
public void TestMethod(string StringOfEnum)
{
TestEnum myEnum;
myEnum.TryParse(StringOfEnum, out myEnum);
}
Dưới đây là hai trang web mà tôi đã đến thăm để giúp đưa ra mã này :
Case Insensitive TryParse for Enums
Extension methods for Enums
Nguồn
2009-06-18 00:01:57
Các ví dụ bạn đưa ra là chính xác những gì tôi muốn làm, thậm chí cùng tên. :) –
@Greg: Trong ngôn ngữ nào bạn có thể sử dụng float và double như kiểu cơ bản cho một enum? Bạn không thể trong C# - bạn nhận được lỗi CS1008: Loại byte, sbyte, ngắn, ushort, int, uint, long, hoặc ulong mong đợi –
Ngôn ngữ duy nhất tôi biết là hỗ trợ nó là CIL. Tôi đã không thực sự thử nó ra để chứng minh nó bởi vì nó có vẻ như một ý tưởng chung xấu, nhưng xem bình luận của Rico gần đáy ở đây: http://en.csharp-online.net/.NET_Type_Design_Guidelines%E2%80%94Enum_Design –