最簡單的方法:
PriorityType tempPriority;
PriorityType? priority;
if (Enum.TryParse<PriorityType>(userInput, out tempPriority))
priority = tempPriority;
編輯
這是我能拿出最好的:
public static class NullableEnum
{
public static bool TryParse<T>(string value, out T? result) where T :struct, IConvertible
{
if (!typeof(T).IsEnum)
throw new Exception("This method is only for Enums");
T tempResult = default(T);
if (Enum.TryParse<T>(value, out tempResult))
{
result = tempResult;
return true;
}
result = null;
return false;
}
}
用途:
if (NullableEnum.TryParse<PriorityType>(userInput, out priority))
以上類可以像Enum.TryParse
一樣使用,但可輸入爲空。您可以添加另一個重載函數,該函數使用非空值T
,以便您可以在兩種情況下使用它。不幸的是,擴展方法在枚舉類型上不能很好地工作(只要我可以在短時間內嘗試操作它)。
你不能創建一個臨時的'PriorityType',然後在解析它之後將它分配給'priority'? –
是的,我可以,只是認爲可能有更好的辦法。發佈這個答案,如果沒有更好的方法,那麼我會接受你的。 :) – core
我不認爲有。 'TEnum'通用參數設置爲'where TEnum:struct'。 –