Когда вы делаете это:
var c = 'x';
var isEqual = c.Equals("x");
результат (isEqual
) всегда будет ложным, потому что он сравнивает 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
вы можете просто проверить, есть ли каждый символ в словаре.