Возможный дубликат:
Разница между == operator и Equals() в С#?
Две формы равенства, первая неудачная, вторая преуспевает.
(object)"abc" == (object)"abc"
false
((object)"abc").Equals((object)"abc")
true
В приведенной ниже ссылке мы видим, что "Операторы равенства в С# не являются полиморфными"
ref: Оператор равенства строк == в С#
btw: все еще не уверен, почему это проблема. Я думал, что это может быть что-то вроде этого, но это происходит не потому, что этот тест преуспевает.
static void Main(string[] args) {
var o = new classOfT<string>() { val = "abc" };
Console.WriteLine((object)o.val == "abc");
}
public class classOfT<T> {
public string val { get; set; }
}
Кстати: Я НЕ СОГЛАШАЮССЯ С ТОЧНЫМ ПРАВИЛОМ ПОСРЕДСТВОМ НА ЭТОМ ВОПРОС, НО ЭЙ.
В ответе говорится:
... Класс String содержит как статический bool Equals (строка a, string b) и статический метод bool Equals (объект a, объект b). Разница в том, что первая определяется в классе String сам, в то время как последний наследуется от класса Object (который базовый класс String)
Семантически это имеет смысл, но имеет ли он смысл в более широком контексте OO и языка С#?
Почему я беспокоюсь о вопросе? Ну, просто нашел ошибку, и я хотел бы записать это в своем мозгу под рифмой или причиной, а не под "просто помнить об этом", она укусила вас перед категорией.
Update:
в настоящее время думает об этом с точки зрения работы с примитивами (с функциональной точки зрения) против полиморфизма. Поскольку я делал все больше и больше функциональных вещей, возможно, поэтому родной язык меня смутил. Я еще не думал об этом (нет, я не прагматичен, меня привлекает дизайн языка). Спасибо, что ответили на все!