thể trùng lặp:
Can’t operator == be applied to generic types in C#?Làm thế nào để so sánh hai yếu tố của cùng loại nhưng không bị ràng buộc loại chung cho bình đẳng?
Tôi đã có lớp generic sau và trình biên dịch phàn nàn rằng "Operator '!=' cannot be applied to operands of type 'TValue' and 'TValue'
" (xem CS0019):
public class Example<TValue>
{
private TValue _value;
public TValue Value
{
get { return _value; }
set
{
if (_value != value) // <<-- ERROR
{
_value= value;
OnPropertyChanged("Value");
}
}
}
}
Nếu tôi constrain TValue
to class
, tôi có thể sử dụng Object.Equals()
. Vì tôi cần điều này cho cả hai cấu trúc và lớp tôi sẽ rất vui nếu tôi có thể tránh được điều đó.
Vì vậy, câu hỏi đặt ra là, làm cách nào để tôi có thể so sánh hai yếu tố thuộc cùng loại chung nhưng không bị ràng buộc cho sự bình đẳng?
Tại sao bạn không thể sử dụng .Thanh toán cho các loại giá trị? –
Theo mặc định, nếu bạn gọi "object.Equals (a, b)" trên các loại tham chiếu, thì "object.ReferenceEquals (a, b)" sẽ được gọi. – TcKs
@TcKs: Theo mặc định, bạn không thể chắc chắn nếu Equals đã được overriden trong một lớp dẫn xuất. – leppie