-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;
    }
}

现在考虑我有一些类型列表myStruct

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

现在我实例化 2 个myStruct使用相同值的不同版本:

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

然后我将第一个实例添加到myList

myList.Add(s1);

然后我做一个简单的检查,看看第二个实例是否在列表中:

bool structsEqual = myList.Contains(s2);

structsEqual真的还是假的?

4

4 回答 4

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 回答
1

有趣的是,这个特定的代码将等于 true,但如果结构包含没有系统类型的对象,那么您必须实现 IComparable 以使其不总是返回 false。

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;
    }
}

要让 Contains 工作,您需要实现 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 回答
0

快速谷歌导致以下链接:

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

所以是的,这将是真实的

于 2012-08-29T14:29:13.830 回答