Return bool or char

本文关键字:char or bool Return | 更新日期: 2023-09-27 18:00:36

我需要的是,checkChar(line[I])返回false或char。所以,若结果不是false,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

Return bool or char

 char noResult="#";

应该是

 char noResult= '#';

CCD_ 1表示字符串,其中CCD_。

方法不应该如下吗?

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,也始终返回结果。

为了返回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
}

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

char? noresult = null

所以支票是

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

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

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

对于转换错误

char noResult="#"; 

#应包含在单引号"#"中

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

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

  • 返回一个可为null的字符(char?""0)。这可以是charnull引用
  • 返回字符串而不是char,返回空字符串而不是false
  • 请使用Unicode代码点0(''0')而不是false

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

以下是工作代码。。。

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);
}

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

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;
    }
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;
        }
    }