gpt4 book ai didi

c# - 运算符 ‘==’ 不能应用于类型 ‘char’ 和 ‘string’ 的操作数

转载 作者:太空狗 更新时间:2023-10-29 22:37:44 31 4
gpt4 key购买 nike

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

从搜索这个site我的印象是字符串将其字符存储为数组并使用 char字符串的属性,您将能够提取第一个字符,从而将 char 与 char 进行比较。在我的搜索中,我还没有发现任何足够具体的东西来真正让我很好地理解正在发生的事情。 This是我遇到的最接近的选项,但我认为它不适用于这种情况。任何见解将不胜感激。

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

Operator ‘==’ cannot be applied to operands of type ‘char’ and ‘string’

    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不同,字符串和char数组是不同的。 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 类型。

关于c# - 运算符 ‘==’ 不能应用于类型 ‘char’ 和 ‘string’ 的操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19205107/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com