[英]c# struct with no reference types
考慮一個不包含任何引用字段的結構(只有基本類型和其他結構)。
考慮這個結構將在集合中使用,我希望它的行為類似於值類型(即int)。
特別是如果您的值類型包含作為引用類型的字段,您應該重寫Equals(Object)方法。 這可以提高性能並使您能夠更接近地表示類型的相等含義。
最好實現IEquatable以避免裝箱(默認Equals接受一個對象類型,因此你的struct必須經過裝箱才能適應這種類型)。 集合(數組,字典等)通常會檢查其成員是否實現IEquatable,並使用IEquatable.Equals,因此最好實現它。 還建議實現默認的Equals(來自System.Object)並直接指向IEquatable.Equals實現。 例:
struct MyStruct : IEquatable<MyStruct>
{
public int A { get; set; }
public int B { get; set; }
public bool Equals(MyStruct other)
{
return A == other.A && B == other.B;
}
public override bool Equals(object obj)
{
if (!(obj is MyStruct)) return false;
return ((MyStruct)obj).Equals(this);
}
public override int GetHashCode()
{
return (A, B).GetHashCode();
}
}
我還提供了一個如何實現GetHashCode的例子,最好的方法是使用Tuple的實現。
再次,實現==和!=取決於您標准庫(System,System.Collections等)使用System.Equals或IEquatable.Equals進行比較,您也應該這樣做。
所以不,實現==和!=是沒有必要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.