当然,在发布此错误之前,我搜索了一下。下面的代码返回:错误CS0029:无法在两个地方隐式将类型'bool'转换为'string'。我是否误解了为什么下面的代码没有返回字符串?我自己想了些什么,Stack Overflow可能会给我什么建议,我尽了最大的努力明确地将其强制转换为字符串,但仅使自己感到困惑。
public static class Bob
{
public static string Response(string statement)
{
string teststring = statement;
bool IsAllUpper(string input)
{
for (int i = 0; i < input.Length; i++)
{
if (Char.IsLetter(input[i]) && !Char.IsUpper(input[i]))
return false;
}
return true;
}
switch(teststring)
{
case IsAllUpper(teststring) && teststring.EndsWith("?"):
string final1 = "Calm down, I know what I'm doing!";
return final1;
case teststring.EndsWith("?"):
string final2 = "Sure";
return final2;
default:
string final3 = "Whatever.";
return final3;
}
}
public static void Main()
{
string input = "This is the end";
Console.WriteLine("{0}", Response(input));
}
}
答案 0 :(得分:5)
使用switch(teststring)
时,您要求代码打开 string 值,例如“ foo”和“ bar”。但是,您的case
是 boolean 值:IsAllUpper(teststring)
和teststring.EndsWith("?")
都返回布尔值。
考虑用if语句替换switch块,例如
if (IsAllUpper(teststring) && teststring.EndsWith("?")) {
string final1 = "Calm down, I know what I'm doing!";
return final1;
}
if (teststring.EndsWith("?")) {
string final2 = "Sure";
return final2;
}
string final3 = "Whatever.";
return final3;
或者,对于最大的简洁性含糊不清,单线:
return teststring.EndsWith("?") ? (IsAllUpper(teststring) ? "Calm down, I know what I'm doing!" : "Sure") : "Whatever."