我不想遍历列表比较每个属性.具有此功能的东西:
class myClass
{
public int I { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<myClass> l = new List<myClass>();
myClass x = new myClass();
x.I = 1;
l.Add(x);
myClass y = new myClass();
y.I = 2;
l.Add(y);
myClass z = new myClass();
z.I = 2;
if (l.ContainsAnInstanceEqualTo(z))
Console.WriteLine("Contains");
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
重要提示:我无法控制该类,并且有一些属性应该具有相同的值.
你应该制作myClass工具IEquatable<myClass>(或至少覆盖Equals(object)),然后只使用:
if (l.Contains(z))
Run Code Online (Sandbox Code Playgroud)
(您还应该重命名该类以遵循.NET命名约定...)
如果你不提供Equals方法,你必须以某种方式指定你感兴趣的那种平等.你可以通过类似Find谓词来做到这一点:
var found = l.Find(c => c.I == z.I);
if (found != null)
{
...
}
Run Code Online (Sandbox Code Playgroud)
或者使用LINQ:
var any = l.Any(c => c.I == z.I);
Run Code Online (Sandbox Code Playgroud)
但它会是更好的覆盖Equals,如果有是平等的自然感.
(List<T>.Contains不会使用你的实现GetHashCode,但你应该按照你的Equals方法实现它...)
| 归档时间: |
|
| 查看次数: |
4856 次 |
| 最近记录: |