2014-12-30 138 views
0

我有有一些值如何爲返回類型爲枚舉的方法返回null?

public enum CompareOperators 
{    
     GreaterThan, 
     LessThan, 
     GreaterThanEqualTo, 
     LessThanEqualTo, 
     EqualTo, 
     NotEqualTo 
} 

枚舉我已經在編譯

Cannot convert null to CompareOperators because it is not a non-nullable value type 

返回此枚舉用於各種條件

public static CompareOperators GetTypeForOperator(string strType) 
{ 
     switch (strType) 
     { 
      case "=": 
       return CompareOperators.EqualTo; 
      case "!=": 
       return CompareOperators.NotEqualTo; 
      case ">": 
       return CompareOperators.GreaterThan; 
      case "<": 
       return CompareOperators.LessThan; 
      case ">=": 
       return CompareOperators.GreaterThanEqualTo; 
      case "<=": 
       return CompareOperators.LessThanEqualTo; 
    } 
    return null; 
} 

我收到以下錯誤的方法在switch聲明中沒有條件滿足的情況下返回null的最佳方法是什麼?

即使我看了下面的問題,我沒有得到一個答案我的解決方案

+0

我會拋出一個異常,而不是返回空的。 – pixelbits

+0

只是有點出於上下文,但我會然後稱之爲GetTypeORDefaultForOperator並使用可空類型 – whoisthis

回答

4

讓你的方法返回一個可爲空CompareOperators

public static CompareOperators? GetTypeForOperator(string strType) 

The ?類型名稱使其可以爲空。使用它的另一個選項,它是相同的:

public static Nullable<CompareOperators> GetTypeForOperator(string strType) 

請參閱MSDN on Using Nullable Types

如前所述,另一種選擇是拋出異常或返回「默認」值,如CompareOperators.Unknown,但這完全取決於您。最好的解決方案是基於您的要求和首選的寫作風格。


最終結果:

public static CompareOperators? GetTypeForOperator(string strType) 
{ 
    switch (strType) 
    { 
     case "=": 
      return ... 
     default: 
      return null; 
    } 
} 

(檢查是否爲空後):

var x = GetTypeForOperator("strType"); 
if (x != null) 
{ ... } 

或者:

public static CompareOperators GetTypeForOperator(string strType) 
{ 
    switch (strType) 
    { 
     case "=": 
      return ... 
     default: 
      return CompareOperators.Unknown; 
    } 
} 

或者:

public static CompareOperators GetTypeForOperator(string strType) 
{ 
    switch (strType) 
    { 
     case "=": 
      return ... 
     default: 
      throw new ArgumentException("strType has a unparseable value"); 
    } 
} 
+2

因爲它是從鏈接確切的建議http://stackoverflow.com/questions/4337193/how-to-set-enum-to-null它不太可能幫助OP ...(和重複的答案)。 –

+0

只是交換機中的默認情況可能有所幫助。 – danish

+1

@AlexeiLevenkov:你說得對。我更新了答案,以便爲用戶的特定問題量身定製答案。 –

4

你不應該在這種情況下返回null而是default塊拋出異常

switch (strType) 
{ 
    //...other cases 

    default: 
    throw new InvalidOperationException("Unrecognized comparison mode"); 
} 

爲不正確的參數你不能夠繼續和異常都是爲了這種情況下,當程序面臨意外情況。

0

你可以用一個未定義的比較

public enum CompareOperators 
{ 
    Undefined, 
    GreaterThan, 

擴展您的枚舉,然後返回默認/備用值

return CompareOperators.Undefined;