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
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)。这可以是char
或null
引用 - 返回字符串而不是
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;
}
}