Я относительно новичок в C #, и сегодня я заметил кое-что интересное, что, я думаю, я никогда не заметил или, возможно, я что-то упускаю. Вот тест NUnit, чтобы привести пример:
object boolean1 = false;
object booloan2 = false;
Assert.That(boolean1 == booloan2);
Этот модульный тест не пройден, но он проходит:
object string1 = "string";
object string2 = "string";
Assert.That(string1 == string2);
Я не настолько удивлен сам по себе, что первый не может видеть как boolean1, а boolean2 - это разные ссылки. Но меня беспокоит то, что первый терпит неудачу, а второй проходит. Я читал (где-то в MSDN), что для этого было сделано какое-то волшебство с классом String. Я думаю, что мой вопрос действительно заключается в том, почему это поведение не было воспроизведено в bool? Как примечание ... если логические значения 1 и 2 объявлены как bool
, то проблем нет.
В чем причина этих различий или почему это было реализовано таким образом? Есть ли ситуация, когда вы хотите ссылаться на объект bool для чего-либо, кроме его значения?