运算符“==”不能应用于“char”和“string”类型的操作数

2024-04-19

我正在开发一个自我指导的简单程序来练习迄今为止学到的概念。我的项目与国际象棋相关,在本例中具体是棋盘(a-h 列和 1-8 行)。系统会询问用户特定棋子的当前位置,希望输入为列字母,后跟行数字。 为了验证这一点,我首先检查该值是否作为两个字符的字符串输入,否则输入的内容已经不正确。 然后,我将输入的字符串转换为小写字符,然后将其与可接受的数组元素列表进行比较。

从搜索这个site https://stackoverflow.com/questions/7922890/in-c-parse-string-into-individual-characters我的印象是字符串将其字符存储为数组并使用char http://msdn.microsoft.com/en-us/library/system.string.chars.aspx字符串的属性,您将能够拉出第一个字符,从而将字符与字符进行比较。在我的搜索中,我还没有找到任何足够具体的东西来真正让我很好地了解正在发生的事情。This https://stackoverflow.com/questions/19033642/operator-cannot-be-applied-to-operands-of-type-char-and-string是我遇到的最接近的选项,我认为它不适用于这种情况。任何见解将不胜感激。

下面的代码会产生以下错误。

运算符“==”不能应用于“char”类型的操作数,并且 '细绳'

    private char[] gridColumns = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', };

    private void createMoveButton_Click(object sender, RoutedEventArgs e)
    {
        // Assigns text box input to associated private fields
        this.gameId = this.gameIdTextBox.Text;
        this.playerId = this.playerIdTextBox.Text;
        this.gamePiece = this.gamePieceTextBox.Text;
        this.currentLocation = this.currentLocationTextBox.Text;
        this.targetLocation = this.targetLocationTextBox.Text;

        // Current location should only ever be 2 characters, ensure from the start this is true.
        if (currentLocationTextBox.Text.Length == 2)
        {
            // Converts contents of currentLocationTextBox to lower case characters for comparison.
            string cl = currentLocation.ToLowerInvariant();

            // Iterates through my array of possible column choices
            for (int i = 0; i < gridColumns.Length; i++)
            {
                Char.ToLowerInvariant(currentLocationTextBox.Text[0]);
                // Trying to compare the first character of my string to the char element of my array.
                if (cl[0] == gridColumns[i])
                {
                    //TODO
                }
            }
        }
        else
        {
            MessageBox.Show("Check your starting location. It needs to be a lower case character variable (a-h) followed by a number (1-8)");
        }
    }

与 C 不同,字符串和字符数组是不同的。 C# 中的字符串可以被视为 char 数组,但您应该考虑它们不同,因此 '==' 比较是不合适的。查看这一点的一种简单方法是使用以下简单表达式

   if ("a" == 'a') { /* do something */ } // ERROR!

看起来它应该可以工作,但它会生成与您所看到的相同的错误,因为它试图将字符串“a”与字符“a”进行比较。在您的示例代码中,文本框控件的 Text 属性是字符串类型。

字符串类有一个索引器,允许您将字符串视为字符数组,但通常使用众多字符串方法之一来实现您的目标更好(更简单)。考虑一下:

        var gridcolumns = "abcdefgh";
        var gridrows = "12345678";
        var input = "a1"; // column row
        var col = gridcolumns.IndexOf(input[0]); // 0 -7
        var row = gridrows.IndexOf(input[1]); // 0 -7

在您提供的代码中,我没有看到会生成您提供的错误的行。以下行没有任何作用

           Char.ToLowerInvariant(currentLocationTextBox.Text[0]);

因为您没有将返回值分配给变量,所以“cl”已经包含该特定值的小写形式。

这条线

            if (cl[0] == gridColumns[i])

不应生成错误,因为这两项都是 char 类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运算符“==”不能应用于“char”和“string”类型的操作数 的相关文章

  • 在锁定屏幕上显示 UWP 控件

    我做了什么 我得到的要求是用户需要能够通过 Windows 锁定屏幕启动我的应用程序 搜索 www 后发现 从锁定屏幕连接热键非常困难 如果不是不可能的话 然后我发现这个帖子 https stackoverflow com question
  • 在c#中初始化多维数组(与其他数组)

    在 C 中 可以使用常量初始化多维数组 如下所示 Object twodArray new Object 00 01 02 10 11 12 20 21 22 我个人认为用硬编码常量初始化数组对于测试练习之外的任何事情都是毫无用处的 无论如
  • 有没有办法在 Visual Studio 项目中创建用户特定的预/后构建事件?

    我目前正在项目中使用构建后事件将程序集复制到另一个目录以进行调试 这是我的机器本地的 仅用于调试目的 所以我更愿意将它放在 中 csproj user文件而不是 csproj文件 我尝试从 复制负责的元素 csproj到 csproj us
  • 如何在 g++ 中使用不同的 STL

    我想对 g 使用不同的 STL 而不是其默认的 libstdc 做到这一点最简单的方法是什么 我发现 nostdinc 标志禁止 g 查找其 STL 标头 但这只是编译时的事情 它仍然会使 g 链接到它自己的 STL 所以我需要找到一种方法
  • 修改文件流

    我现在正在开发一个允许编辑非常大的文本文件 4Gb 的类 嗯 这可能听起来有点愚蠢 但我不明白如何修改流中的文本 这是我的代码 public long Replace String text1 String text2 long repla
  • C++ 多重继承关闭同名运算符

    是否可以从两个不同的抽象类继承仅返回类型不同的同名运算符 如果是这样 他们 实现运算符的语法是什么 使用 解析运算符的语法是什么 与任何其他虚函数相同 一般情况下的开销是多少 如果您可以向我提供参考或示例代码 将会有所帮助 thanks 1
  • 通过引用捕获 std::Exception?

    我有一个愚蠢的问题 我读过这篇关于 std exception 的文章http www cplusplus com doc tutorial exceptions http www cplusplus com doc tutorial ex
  • 位置 0 处没有行

    cmd CommandText select from product where prod code Trim txtprod code Text and branch w location and avail stock lt gt 0
  • 回发后我的 JavaScript 函数在 ASP.NET 中不起作用

    我有共同的功能 我把它折叠起来CommonFunctions js在脚本文件夹中 我将它包含在我的主页上并在我的页面上使用它 当我在页面上进行任何回发时 我的功能不起作用 My CommonFunctions js function gf
  • 有没有一种方法可以通过数据注释来验证一个日期属性大于或等于另一个日期属性?

    我有一个StartDate and EndDate on my SchoolEvents模型和我想知道是否有任何数据注释可以用来验证StartDate小于或等于EndDate并且那EndDate大于或等于StartDate 从我的角度来看
  • 为什么要重新分配向量副本而不是移动元素? [复制]

    这个问题在这里已经有答案了 可能的重复 当向量增长时如何强制移动语义 https stackoverflow com questions 8001823 how to enforce move semantics when a vector
  • valgrind 错误“大小 4 的读取无效”[重复]

    这个问题已经存在了 这是我的程序 int fun1 void int n 9 int pf n cout lt lt pf lt
  • 如何将java数组列表转换为javascript数组? [复制]

    这个问题在这里已经有答案了 我们如何将 String 对象的 java arraylist 转换为 javascript 数组 这就是我正在做的事情 但我正在寻找更好的方法来做到这一点 我不想迭代数组列表 var myArray
  • C++ 将浮点数转换为无符号字符?

    我是 C 新手 我想做了一些谷歌搜索sprintf可以完成这项工作 但是编译时出现错误 无法在unsigned char and a char 我需要一个无符号字符 因为我要打印到图像文件 0 255 RGB unsigned char p
  • 从 Unity WebGL 调用 Angular2 函数

    目前 我正在使用 Angular2 版本 2 1 2 和 Unity 可视化工具 使用 Unity 5 5 构建 我需要做的是从 Unity 到 Angular2 进行通信 我正在使用类似于下面的代码 public void GetBill
  • 您可以bind()和connect() UDP连接的两端吗

    我正在编写一个点对点消息队列系统 它必须能够通过 UDP 运行 我可以任意选择一侧或另一侧作为 服务器 但这似乎不太正确 因为两端都从另一端发送和接收相同类型的数据 是否可以绑定 和连接 两端 以便它们只能彼此发送 接收 这似乎是一种非常对
  • C# 数据库包装设计

    我正在为 C 设计一个数据库包装器 以下是我有两个选择 选项A class DBWrapper IDisposable private SqlConnection sqlConn public DBWrapper sqlConn new S
  • 使用实体框架而不使用 using 语句的缺点?

    有很多这样的代码块 public class SomeController Controller DbEntities entity new DbEntities public ActionResult Add entity someOpe
  • 更改创建 XML 读取器时使用的 XmlDictionaryReader Quotas 对象的 MaxArrayLength 属性

    我在向 C 服务发送 或接收 字节数组时遇到以下异常 There was an error deserializing the object of type System Byte The maximum array length quot
  • JS 中的展开/休息运算符如何工作? [复制]

    这个问题在这里已经有答案了 我正在努力完全理解扩展 休息运算符在 JS 中的工作原理 我已经阅读了 MDN 文档 但我仍然不完全清楚 我在下面提供了一个示例 我在其中使用了它并且它按预期工作 const users name Samir a

随机推荐