FirstOrDefault (또는 고유 한 경우 SingleOrDefault) 만 사용하십시오.
var myItem = myArray.FirstOrDefault(x => x.Name == "Joe");
또는 당신은 BinarySearch 및 강제하려는 경우 당신이 MyClassNameComparer이 IComparer<MyClass>
하고 이름 속성에 따라 비교하여 위치를 배열
var myItem = Array.BinarySearch(myArray,
new MyClass { Name = "Joe" },
new MyClassNameComparer());
를 정렬 것을 알고있다.
임시 개체를 원하지 않는다면 상수 문자열이 괜찮다고 가정합니다. 그렇지 않으면 손실됩니다. 그런 다음 사용할 수 있습니다.
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);
}
첫 번째 것은 binarysearch가 아닙니다. 두 번째 것은 내가 질문에 언급 한 것처럼 내가 만들고 싶지 않은 것을 찾을 임시 객체를 만듭니다. – codymanix
죄송합니다. 나는 당신의 질문을 임시 배열을 만들고 싶지 않은 것으로 잘못 읽었다. 나는 임시 객체를 생성하지 않는다는 것에 대한 당신의 제한이 솔루션을 더 쉽게 만들어주기 때문에 잘못된 것이라고 생각한다. 그렇지 않으면 MyClass 객체를 문자열과 비교할 수있는보다 복잡한 비교자를 만들어야합니다. – tvanfosson
@codymanix - note 임시 문자열 개체를 사용한다는 것 외에는 사용자의 요구 사항을 충족한다고 생각되는 문자열/MyClass 비교기로 내 대답을 업데이트했습니다. :-) – tvanfosson