2012-02-19 65 views
1

我的搜索已空白,或者我只是不理解我发现的结果。我试图提示用户输入一个布尔值,但我希望答案是yes或no。让我知道如果你需要看到更多的代码,但我有这个提示。C#提示布尔值

public static bool getBoolInputValue(string inputType) 
    { 
     bool valid = false; 
     bool value = true; 
     string inputString = string.Empty; 
     do 
     { 
      inputString = GetInput(inputType); 
      if (!(String.IsNullOrEmpty(inputString))) 
      { 
       valid = bool.TryParse(inputString, out value); 
      } 
      if (!valid) 
       Console.WriteLine("Invalid " + inputType + " try again!"); 
     } while (!valid); 

     return value; 
    } 

这是我的布尔值的参数。也许这需要更具体一些?

public bool Nitrus 
    { 
     set { nitrus = value; } 
     get { return nitrus; } 
    } 

谢谢你的帮助。我对编程相当陌生,但无法弄清楚。它确实成功地提示了,但是我把什么答案放入框中并不重要,它告诉我这是不正确的格式。

+1

跳过'IsNullOrEmpty'测试,'bool.TryParse'是足够聪明,如果返回false你传递一个空字符串 – 2012-02-19 23:03:53

+1

我不明白为什么有人会投下这个问题(我已经投了赞成票),我们都必须从某个地方开始,包括发展自己的技能找到我们问题的答案,无论是MSDN还是其他地方。 – 2012-02-19 23:16:02

回答

2

如果我理解正确的话,你希望用户输入‘是’,那将意味着你有一个真正的价值。如果这是正确的,跳过所有string.IsNullOrEmptybool.TryParse的东西,做一些更是这样。

//make it ToLower so that it will still match if the user inputs "yEs" 
inputString = GetInput(inputType); 
if (inputString.ToLower() == "yes") 
{ 
    value = true; 
} 
else 
{ 
    value = false; 
} 

//note that the if/else code is the same as directly applying 
// the value from the comparison itself: 
// value = inputString.ToLower() == "yes"; 

// this allows the user to type in "yes" or "y": 
// value = inputString.ToLower() == "yes" || inputString.ToLower() == "y"; 
+0

微软关于使用.NET字符串的指导方针要求使用ToUpper而不是ToLower,尽管如果这是所需的行为,指定不区分大小写的比较可能更好。 – phoog 2012-02-20 00:33:10

+0

谢谢,这个作品。但是我的程序不断提示我提出这个问题。由于某种原因,它显然不喜欢答案。到下一个问题! – willisj318 2012-02-20 01:15:30

0

你的程序只接受'true'或'false'作为有效的布尔值。如果你想'是'或'不是',那么你需要做一个字符串比较。

valid = string.Compare(inputString, "yes", true) == 0 || string.Compare(inputString, "no", true) == 0; 

... 
value = string.Compare(inputString, "yes", true) == 0; 
+0

'? true:false'总是多余的。 – 2012-02-19 23:16:23

+0

更新了答案,现在已经很晚了:P – devdigital 2012-02-19 23:18:04

+0

不用担心,我也很累,只是整晚玩了16个小时的Axis and Allies游戏:) – 2012-02-19 23:21:17

0

Boolean.TryParse只承认 “真” 与 “假”。对于“是”和“No`或‘开’和‘关’,你需要编写自己的功能。

0
public static bool getBoolInputValue() 
{ 
    bool value; 
    bool valid; 
    do 
    { 
     Console.WriteLine("Enter yes or no: "); 
     var inputString = Console.ReadLine(); 
     if (String.IsNullOrEmpty(inputString)) 
     { 
      continue; 
     } 
     if (string.Equals(inputString, "yes") 
     { 
      value = true; 
      valid = true; 
     } 
     else if (string.Equals(inputString, "no") 
     { 
      value = false; 
      valid = true; 
     } 

    } while (!valid); 

    return value; 
} 
+0

很确定这不会编译,因为'valid'是未初始化的。即,如果输入字符串是“jimmy crack corn”开始。 – 2012-02-19 23:19:58

+0

是的,我试过这个,有效的抛出一个错误。 – willisj318 2012-02-20 02:02:12