【问题标题】:Why is Visual Studio saying that I'm trying to convert a string to a boolean when I'm not using a boolean at all? (CS0029) [closed]当我根本不使用布尔值时,为什么 Visual Studio 会说我正在尝试将字符串转换为布尔值? (CS0029) [关闭]
【发布时间】:2018-10-14 17:34:53
【问题描述】:

我正在尝试为我的团队制作一个概念验证命令行软件,但是我的代码有问题。编译器将代码视为我正在尝试将字符串隐式转换为 bool 值,但我在这里根本没有使用任何布尔值,而且我绝不试图将任何东西转换为布尔值。以下 sn-p 可用于重现该问题:

 namespace default {
     class test {
           static void Main() {
             Console.Clear();
             string IsDemoMode;
             Console.WriteLine("Activate Demo Mode? (Y/N)");
             IsDemoMode = Console.ReadLine();

             if (string IsDemoMode = "Y")
             {
               // Demo code...
             } else 
             {
               // Non-Demo Code...
             };
           }
      }
 }

这里的问题是:为什么 Visual Studio 认为我正在尝试将字符串转换为布尔值,而我什至还没有做到这一点?编译器是否期望一个布尔值而不是字符串?

【问题讨论】:

  • if (string IsDemoMode = "Y") 应该是 if (string IsDemoMode == "Y") ...您当前的代码是 assignment
  • @Filburt 感谢您的帮助,现在看来问题已解决。只是为了澄清一下,如果只有 1 或 2 = 符号,为什么这很重要?我的理解是 '==' 和 '=' 是一回事。
  • @MeowcatMcMeowXVIII 赋值和等于之间有区别。你仍然可以在你的 if 中同时使用“if ((somestring = otherstring) == 第三个字符串)”
  • @MeowcatMcMeowXVIII,在这种情况下最好使用“等于”。请检查我更新答案中的示例
  • @MeowcatMcMeowXVIII 并确认您可以获得 +2 声望的答案之一 ;)

标签: c# .net string


【解决方案1】:

您使用 = 而不是 ==。所以字符串 = "some text" 会给你 string。字符串 == "some text" 会给你 bool

namespace default {
         class test {
               static void Main() {
                 Console.Clear();
                 string IsDemoMode;
                 Console.WriteLine("Activate Demo Mode? (Y/N)");
                 IsDemoMode = Console.ReadLine();

                 if (IsDemoMode == "Y")
                 {
                   // Demo code...
                 } else 
                 {
                   // Non-Demo Code...
                 };
               }
          }
 }

UPD。在这种情况下更推荐使用Equals。因此,您可以根据需要忽略大小写等。

namespace default {
         class test {
               static void Main() {
                 Console.Clear();
                 string IsDemoMode;
                 Console.WriteLine("Activate Demo Mode? (Y/N)");
                 IsDemoMode = Console.ReadLine();

                 if (IsDemoMode.Equals("Y", StringComparison.InvariantCultureIgnoreCase))
                 {
                   // Demo code...
                 } else 
                 {
                   // Non-Demo Code...
                 };
               }
          }
 }

【讨论】:

    【解决方案2】:

    把代码改成

            if(IsDemoMode.ToLower() == "y") 
             {
                // Demo code...
             } 
             else 
             {
                // Non-Demo Code...
             }
    

    【讨论】:

      【解决方案3】:

      您应该在 if 中使用 == 而不是 = :

      if (IsDemoMode == "Y")
      {
          //Demo mode
      } 
      

      【讨论】:

        猜你喜欢
        • 2016-02-27
        • 2018-09-07
        • 1970-01-01
        • 2013-01-24
        • 2012-03-10
        • 2012-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多