-5

この構造体を考えてみましょう。

public struct myStruct{
    public int value1;
    public int value2;
    public int value3;

    public myStruct(int val1, int val2, int val3){
        value1 = val1;
        value2 = val2;
        value3 = val3;
    }
}

type のリストがあるとしますmyStruct

public List<myStruct> myList = new List<myStruct>();

myStructここで、同じ値を使用して2 つの異なるバージョンをインスタンス化します。

myStruct s1 = new myStruct(1,2,3);
myStruct s2 = new myStruct(1,2,3);

次に、最初のインスタンスを に追加しますmyList

myList.Add(s1);

次に、2 番目のインスタンスがリストに含まれているかどうかを簡単に確認します。

bool structsEqual = myList.Contains(s2);

structsEqual真か偽か?

4

4 に答える 4

1

興味深いことに、この特定のコードはtrueに等しくなりますが、構造体にシステムタイプがないオブジェクトが含まれている場合、これが常にfalseを返すとは限らないようにIComparableを実装する必要があります。

public struct myStruct
{ 
    public MyOwnType value1; 
    public int value2; 
    public int value3; 

    public myStruct(MyOwnType val1, int val2, int val3){ 
        value1 = val1; 
        value2 = val2; 
        value3 = val3; 
    } 
}

public class MyOwnType
{
    public int Id { get; set; }

    public MyOwnType(int id)
    {
        this.Id = id;
    }
}

含むを機能させるには、IComparableを実装する必要があります。

public class MyOwnType : IComparable
{
    public int Id { get; set; }

    public MyOwnType(int id)
    {
        this.Id = id;
    }

    public int CompareTo(object obj)
    {
        if (obj == null) return 1;

        MyOwnType other = obj as MyOwnType;
        if (other != null)
            return this.Id.CompareTo(other.Id);
        else
            throw new ArgumentException("Object is not a MyOwnType");
    }
}
于 2012-08-29T14:36:24.127 に答える
1

そこにすべてのコードがあり、それをプログラムに入れて実行し、何が起こるかを確認できます。私はLinqPadを使用していますが、ここに私が得たものがあります...

public List<myStruct> myList = new List<myStruct>(); 

void Main()
{
    myStruct s1 = new myStruct(1,2,3); 
    myStruct s2 = new myStruct(1,2,3); 

    myList.Add(s1); 

    bool structsEqual = myList.Contains(s2); 

    structsEqual.Dump();
}

public struct myStruct{ 
    public int value1; 
    public int value2; 
    public int value3; 

    public myStruct(int val1, int val2, int val3){ 
        value1 = val1; 
        value2 = val2; 
        value3 = val3; 
    } 
} 

結果 = 「真」

于 2012-08-29T14:27:02.560 に答える
1

構造体は値型なので、答えはTrueです。

于 2012-08-29T14:29:26.530 に答える
0

簡単なグーグルは次のリンクをもたらしました:

http://www.java2s.com/Tutorial/CSharp/0120__struct/Valuetypeequalitydefaultbehavior.htm

はい、それはTrueになります

于 2012-08-29T14:29:13.830 に答える