C# 如何列出<;T>;检查是否包含自定义结构?
我有以下实现C# 如何列出<;T>;检查是否包含自定义结构?,c#,list,C#,List,我有以下实现 // Contains returns true if the specified element is in the List. // It does a linear, O(n) search. Equality is determined by calling // item.Equals(). // public bool Contains(T item) { if ((Object) item == null) { for(int i=0; i&
// Contains returns true if the specified element is in the List.
// It does a linear, O(n) search. Equality is determined by calling
// item.Equals().
//
public bool Contains(T item) {
if ((Object) item == null) {
for(int i=0; i<_size; i++)
if ((Object) _items[i] == null)
return true;
return false;
}
else {
EqualityComparer<T> c = EqualityComparer<T>.Default;
for(int i=0; i<_size; i++) {
if (c.Equals(_items[i], item)) return true;
}
return false;
}
}
//如果指定元素在列表中,Contains返回true。
//它进行线性O(n)搜索。平等性是由调用
//item.Equals()。
//
公共布尔包含(T项){
如果((对象)项==null){
对于(int i=0;iif
部分仅检查我们是否在列表中查找null
项。如果查找,则它遍历列表并在列表项中查找null
值。此部分仅对引用类型有效,因为值类型不能是null
另一方面的
else
部分在项不为null
的情况下执行所有检查,因此此代码也用于结构
。它所做的是为类型获取一个默认的相等比较器(EqualityComparer c=EqualityComparer.default
)并使用此比较器查找列表中的项。if部分仅检查我们是否在列表中查找null
项。如果查找,则它将遍历列表并在列表的项中查找null
值。此部分仅对引用类型有效,因为值类型不能为null
另一方面的
else
部分在项不为null
的情况下执行所有检查,因此此代码也用于结构
。它所做的是为类型获取一个默认的相等比较器(EqualityComparer c=EqualityComparer.default
)并使用此比较器查找列表中的项。您需要了解的是值类型
和引用类型
之间的区别
struct
,就像int
、long
等一样,不是存储在堆上,而是存储在堆栈上。引用类型
在堆栈上有一个指向实际对象数据的指针(内存地址)
(阅读堆栈和堆之间的差异。)
但是,将struct
添加到ArrayList
甚至List
之类的东西中仍然有效,因为它最有可能首先被装箱到引用类型中,因此struct
将不会null
,即使您传递了default()
它仍将不为空
然后,它将像@dotnetom解释的那样,执行和评估结构是否在集合中的部分执行和评估其他部分。您需要了解的是值类型
和引用类型
之间的区别
struct
,就像int
、long
等一样,不是存储在堆上,而是存储在堆栈上。引用类型
在堆栈上有一个指向实际对象数据的指针(内存地址)
(阅读堆栈和堆之间的差异。)
但是,将struct
添加到ArrayList
甚至List
之类的东西中仍然有效,因为它最有可能首先被装箱到引用类型中,因此struct
将不会null
,即使您传递了default()
它仍将不为空
然后,它将像@dotnetom解释的那样执行并评估结构是否在集合中的部分执行和评估一样。它将转到else
块,在那里-它将搜索是否使用更具体的类型而不是Equals(对象)覆盖了Equals。我不理解这个问题。它将转到else
块,在那里-它将搜索是否使用更具体的类型而不是Equals(对象)重写了Equals。我不理解这个问题