gpt4 book ai didi

c# - Equals() 方法在比较时无法识别相似/相同的字符

转载 作者:太空宇宙 更新时间:2023-11-03 18:51:55 28 4
gpt4 key购买 nike

为什么用 .Equals 比较字符总是返回 false?

char letter = 'a';
Console.WriteLine(letter.Equals("a")); // false

总的来说,我正在尝试编写一个英语 - 摩尔斯电码翻译器。我在比较上面显示的 char 值时遇到问题。我从 foreach 开始分析来自 ReadLine() 输入的所有字符,通过使用 WriteLine() 方法,所有字符都是转置很好,但是当尝试使用 .Equals() 方法比较它们时,无论我做了什么,在尝试比较字符时它总是输出 false。

我已经成功地对其他字符串使用了 .Equals() 方法,但它似乎不适用于我的字符。

using System;
public class MorseCode {
public static void Main (string[] args) {
Console.WriteLine ("Hello, write anything to convert it to morse code!");
var input = Console.ReadLine();
foreach (char letter in input) {
if(letter.Equals("a")) {
Console.WriteLine("Its A - live");
}
Console.WriteLine(letter);
}
var morseTranslation = "";
foreach (char letter in input) {
if(letter.Equals("a")) {
morseTranslation += ". _ - ";
}
if(letter.Equals("b")) {
morseTranslation += "_ . . . - ";
}
if(letter.Equals("c")) {
morseTranslation += "_ . _ . - ";
}
...
}
}
Console.WriteLine("In morse code, " + input + " is '"morseTranslation + "'");
}
}

开始时,我编写了 foreach 来测试它是否识别并运行了正确的输出,但最后,当我将“sample”写入 ReadLine(),它给了我:

Hello, write anything to convert it to morse code!
sample
s
a
m
p
l
e

最佳答案

当你这样做时:

var c = 'x';
var isEqual = c.Equals("x");

结果 (isEqual) 将始终为 false,因为它将 stringchar 进行比较。这将返回 true:

var isEqual = c.Equals('x');

区别在于"x"是一个string字面量而'x'是一个char字面量.

造成这种混淆的部分原因是,当您使用对象的 Equals 方法时,它允许您将任何类型与任何其他类型进行比较。所以你可以这样做:

var x = 0;
var y = "y";
var isEqual = x.Equals(y);

...编译器将允许它,即使 intstring 之间的比较不起作用。它会给你这个警告:

当比较intchar 等值类型与其他相同类型的值时,我们通常使用==,例如

if (someChar == someOtherChar)

那么如果你尝试这样做:

if(someChar == "a") 

它不会编译。它会告诉您,您正在比较一个 char 和一个 string,这样就更容易了,因为不需要运行程序并查找错误,它不会编译并且它会准确地告诉您问题出在哪里。


只是为了好玩,这是另一个实现。

public static class MorseCodeConverter
{
private static readonly Dictionary<char, string> Codes
= CreateMorseCodeDictionary();

public static string Convert(string input)
{
var lowerCase = input.ToLower();
var result = new StringBuilder();
foreach (var character in input)
{
if (Codes.ContainsKey(character))
result.Append(Codes[character]);
}
return result.ToString();
}

static Dictionary<char, string> CreateMorseCodeDictionary()
{
var result = new Dictionary<char, string>();
result.Add('a', ". _ - ");
result.Add('b', "_ . . . - ");
// add all the rest
return result;
}
}

一个区别是它本身就是一个类,没有控制台应用程序。然后您可以在控制台应用程序中使用它。从键盘读取输入,然后调用

MorseCodeConverter.Convert(input);

获取结果,然后打印到控制台a

将所有字符放入字典意味着无需重复 if/then,您只需检查每个字符是否在字典中即可。

关于c# - Equals() 方法在比较时无法识别相似/相同的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55960323/

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