2013-05-30 171 views
1
public bool ContainsUnicodeCharacter(char[] input) 
    { 
     const int MaxAnsiCode = 255; 
     bool temp; 
     string s; 

     foreach (char a in input) 
     { 
      s = a.ToString(); 
      temp = s.Any(c => c > MaxAnsiCode); 

      if (temp == false) 
      { 
       return false; 
      } 
     }    
    } 

此代碼用於檢查unicode是否存在於輸入字符數組中。包含Unicode字符檢查失敗

我收到錯誤消息: 「ContainsUnicodeCharacter(的char [])」:並非所有的代碼路徑返回一個值「

什麼錯在這裏去了,請幫助。 謝謝。

+2

**所有** .NET'char's是Unicode字符。 – AakashM

+0

那麼's = a.ToString(); temp = s.Any(c => c> MaxAnsiCode);'可以用'temp = a> MaxAnsiCode;'替換。 – Vlad

回答

3

你只需要最後}前加return true;,但我也認爲你有測試逆轉:

public bool ContainsUnicodeCharacter(char[] input) 
{ 
    const int MaxAnsiCode = 255; 
    bool temp; 
    string s; 

    foreach (char a in input) 
    { 
     s = a.ToString(); 
     temp = s.Any(c => c > MaxAnsiCode); // true if unicode found 

     if (temp == true) 
     { 
      return true; 
     } 
    } 

    return false; 
} 
5

你的方法是不是經過深思熟慮通過。它可以做得更簡單:

public static bool ContainsUnicodeCharacter(this IEnumerable<char> input) 
{ 
    const int MaxAnsiCode = 255; 
    return input.Any(c => c > MaxAnsiCode); 
} 

你有兩個沒有理由的嵌套循環。

我使該方法成爲一種通用的擴展方法。

+2

如果您使參數'input'具有'IEnumerable '類型,則可以使用字符串或任何'char'值輕鬆調用該方法。此外,該簽名會向呼叫者發出信號:「我們不會改變您的輸入,我們只會循環播放。」 –

+0

這是另一種不使用lambda表達式的解決方案http://stackoverflow.com/a/40252987/348551 –

0

你只有1個return語句是一部分,如果一個條件,如果......提到您可以添加return true;但你有原因的錯誤是你的函數沒有什麼返回如果溫度從來沒有等同於假

public bool ContainsUnicodeCharacter(char[] input) 
    { 
     const int MaxAnsiCode = 255; 
     bool temp; 
     string s; 

     foreach (char a in input) 
     { 
      s = a.ToString(); 
      temp = s.Any(c => c > MaxAnsiCode); 
      if (temp == false) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 
3

除了@ egrunin的回答之外,我不知道爲什麼要遍歷所有字符,然後將它們轉換爲字符串,這樣您就可以在生成的字符數組上使用Linq方法。你可以像這樣簡化你的整個方法(保持相同的邏輯):

public bool ContainsUnicodeCharacter(char[] input) 
{ 
    const int MaxAnsiCode = 255; 

    return input.Any(c => c > MaxAnsiCode); 
}