返回bool或char

时间:2014-04-29 08:36:07

标签: c# string char

我需要的是checkChar(line [i])返回false或char。因此,如果结果不为假,则for循环有效,如果有结果,则会中断并打印出char。

我是c#的新手,所以不知道怎么做。我试过这种方式。

using System.IO;
using System;

class Program
{
    static void Main()
    {
       Console.Write("Write a string: ");
       string line = Console.ReadLine();
       char result;
       if (line != null)
        {
            for(int i=0; i<=line.Length; i++){
                result = checkChar(line[i]);
                if(!result.Equals("#"))
                    break;
            }
            Console.WriteLine(result);
        }
    }    

    static char checkChar(char input){
        char[] letters={'f', 'g', 'h'};
        char noResult="#";
        foreach(char letter in letters){
            if(input.Equals(letter))
                return letter;
            else return noResult;
        }
    }
}

获取错误:

main.cs(18,31): error CS0165: Use of unassigned local variable `result'
main.cs(24,14): error CS0029: Cannot implicitly convert type `string' to `char'
main.cs(22,17): error CS0161: `Program.checkChar(char)': not all code paths return a value
Compilation failed: 3 error(s), 0 warnings

8 个答案:

答案 0 :(得分:5)

 char noResult="#";

应该是

 char noResult= '#';

""表示一个字符串,其中''表示一个字符。

该方法不应如下吗?

static char checkChar(char input){
        char[] letters={'f', 'g', 'h'};
        char noResult="#";
        foreach(char letter in letters){
            if(input.Equals(letter))
                return letter;
        }
        return noResult;
    }

因此,一旦foreach完成了letters的迭代,就会返回noResult而不是迭代完成之前? 这样,即使找不到char,您也总是会返回结果。

答案 1 :(得分:3)

要返回bool通常的方法是使用out参数:

static bool checkChar(char input, out char output){
    char[] letters={'f', 'g', 'h'};
    char noResult = '#';
    foreach(char letter in letters){
        if(input.Equals(letter))
        {
            // this is okay. Continue.
        }
        else
        {
            output = noResult;
            return false;
        }
    }

    output = letter;
    return true;
}

像这样使用:

char output;
if (checkChar('?', out output))
{
    // valid, do something
}

答案 2 :(得分:2)

它必须是bool吗?为什么不为null?

char? noresult = null

因此检查将是

for(int i=0; i<=line.Length; i++){
    result = checkChar(line[i]);
    if(!result.HasValue)
        break;
}

答案 3 :(得分:1)

结果错误:您正在创建char类型的结果变量。 结果的值最初为null。

然后在if中初始化它,然后使用它但是如果“line”等于null,则结果永远不会被初始化,因此你使用的是Console.WriteLine(null)。

有关转换错误

char noResult="#"; 

#应该用单引号'#'

括起来

然后,并非所有返回值的路径都是因为CheckChar没有独立的return子句,这意味着如果letters为null(你和我知道它不是,但是编译器没有),然后foreach永远不会被执行,因此不会被调用。

答案 4 :(得分:1)

您有几个选择。它们都不是你想要的,但如果你正确地写了调用者,他们就可以解决同样的问题。

  • 返回可以为空的字符char?System.Nullable<char>)。这可以是charnull参考。
  • 返回字符串而不是char,返回空字符串而不是false
  • 使用Unicode代码 - Point 0('\0')代替false

在大多数情况下,我会返回一个字符串,但其他两个中的任何一个都可能是解决某些问题的正确方法。

答案 5 :(得分:1)

这是工作代码......

void Main()
{
           string line = Console.ReadLine();
           bool result;
           for(int i=0; i<line.Length; i++)
           {
               result = checkChar(line[i]);
               if(!result)
                   continue;
                Console.WriteLine(line[i]);
            }
}


static bool checkChar(char input)
{
   char[] letters={'f', 'g', 'h'};
   return letters.Contains(input);
}

答案 6 :(得分:0)

定义变量时,请指定默认值。例如:

char result = char.MinValue;

同样更改checkChar方法:

static char checkChar(char input){
        char[] letters={'f', 'g', 'h'};
        char result='#';
        foreach(char letter in letters){
            if(input.Equals(letter))
              result = letter;  
        }

        return result;
    }

答案 7 :(得分:0)

static void Main()
    {
       Console.Write("Write a string: ");
       string line = Console.ReadLine();
       object result;
       if (line != null)
        {
            for(int i=0; i<=line.Length; i++){
                result = checkChar(line[i]);
                if(result is bool)
                    break;
            }
            Console.WriteLine(result);
        }
    }    

    static object checkChar(char input){
        char[] letters={'f', 'g', 'h'};
        char noResult="#";
        foreach(char letter in letters){
            if(input.Equals(letter))
                return letter;
            else return false;
        }
    }