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。

我收到错误消息:“ ContainsUnicodeCharacter(char[])':并非所有代码路径都返回值”

这里出了什么问题,请帮忙。谢谢你。

4

4 回答 4

5

你的方法没有经过深思熟虑。它可以做得更简单:

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

你有两个没有理由的嵌套循环。

我使该方法成为一种普遍适用的扩展方法。

于 2013-05-30T15:22:35.767 回答
3

您需要return true;在 last 之前添加},但我也认为您将测试反转:

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;
}
于 2013-05-30T15:19:11.047 回答
3

除了@egrunin 的回答,我不知道为什么要遍历所有字符,然后将它们转换为字符串,这样您就可以在生成的字符数组上使用 Linq 方法。您可以像这样简化整个方法(保持相同的逻辑):

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

    return input.Any(c => c > MaxAnsiCode);
}
于 2013-05-30T15:23:28.270 回答
0

您只有 1 个 return 语句,如果条件 if...如前所述,您可以添加return true;,但您得到该错误的原因是如果 temp 永远不等于 false,则您的函数没有任何可返回的内容

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;  
    }
于 2013-05-30T15:23:17.120 回答