我需要的是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
答案 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>
)。这可以是char
或null
参考。char
,返回空字符串而不是false
。'\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;
}
}