2013-05-30 89 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); 
}