은 내가 ConcurrentDictionary 있습니다, 실제 키 항목을 검색하는 데 사용되는 개체입니다하지만 대신에 단순히 키로 해시 코드를 사용하는ConcurrentDictionary.GetOrAdd() : 다른 서명을 가진 valueFactory
private static ConcurrentDictionary<int, string> _cd = new ConcurrentDictionary<int, string>();
는 보수적를하도록 (가능성이 큰) 객체 ISN ' t 키 :
public static string GetTheValue(Foo foo)
{
int keyCode = foo.GetHashCode(); // GetHashCode is overridden to guarantee uniqueness
string theValue = _cd.GetOrAdd(keyCode, FooFactory);
return theValue;
}
그러나 Factory에서 개체를 준비 할 때 Foo 개체에 다양한 속성이 필요합니다. GetOrAdd()의 valueFactory 매개 변수가 Func<int, string>
을 예상하기 때문에 나는 내 푸 개체를 전달할 수 없습니다. 그렇게 할 수 전혀인가?
그렇게하지 마십시오. HashCode는 고유하지 않습니다. 큰 개체를 사용해야합니다. 그것은 아무런 해를 끼치 지 않을 것입니다. – SLaks
@SLaks : GetHashCode() 대신 ToString()을 사용한다고 가정합니다. – Bullines
** **하지 마십시오. – SLaks