只需使用 FirstOrDefault(或 SingleOrDefault,如果唯一)。
var myItem = myArray.FirstOrDefault( x => x.Name == "Joe" );
或者如果你想强制执行 BinarySearch 并且你知道数组是有序的
var myItem = Array.BinarySearch( myArray,
new MyClass { Name = "Joe" },
new MyClassNameComparer() );
其中 MyClassNameComparer 是 IComparer<MyClass> 并根据 name 属性进行比较。
如果你不想要任何临时对象——我假设一个常量字符串是可以的,否则你会迷路——那么你可以使用。
var myItem = Array.BinarySearch( myArray,
"Joe",
MyClassOrStringComparer() );
MyClassOrStringComparer 能够将字符串与 MyClass 对象进行比较(反之亦然)。
public class MyClassOrStringComparer
{
public int Compare( object a, object b )
{
if (object.Equals(a,b))
{
return 0;
}
else if (a == null)
{
return -1;
}
else if (b == null)
{
return 1;
}
string aName = null;
string bName = null;
if (a is string)
{
aName = a;
}
else
{
aName = ((MyClass)a).Name;
}
if (b is string)
{
bName = b;
}
else
{
bName = ((MyClass)b).Name;
}
return aName.CompareTo( b.Name );
}