为什么用 .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,因为它将 string
与 char
进行比较。这将返回 true:
var isEqual = c.Equals('x');
区别在于"x"
是一个string
字面量而'x'
是一个char
字面量.
造成这种混淆的部分原因是,当您使用对象的 Equals
方法时,它允许您将任何类型与任何其他类型进行比较。所以你可以这样做:
var x = 0;
var y = "y";
var isEqual = x.Equals(y);
...编译器将允许它,即使 int
和 string
之间的比较不起作用。它会给你这个警告:
当比较int
或char
等值类型与其他相同类型的值时,我们通常使用==
,例如
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/