我有一個ConcurrentDictionary:ConcurrentDictionary.GetOrAdd():valueFactory有不同的簽名
private static ConcurrentDictionary<int, string> _cd = new ConcurrentDictionary<int, string>();
保守,實際鍵可用於檢索的項目是一個對象,但我不是簡單地使用它的哈希碼鍵,使得(可能很大)的對象不是關鍵:
public static string GetTheValue(Foo foo)
{
int keyCode = foo.GetHashCode(); // GetHashCode is overridden to guarantee uniqueness
string theValue = _cd.GetOrAdd(keyCode, FooFactory);
return theValue;
}
然而,在工廠製備的對象時,我需要在Foo對象的各種屬性:
private static string FooFactory(Foo foo)
{
string result = null;
object propA = foo.A;
object propB = foo.B;
// ... here be magic to set result
return result;
}
由於GetOrAdd()的valueFactory參數需要Func<int, string>
,因此看起來我無法將我的Foo對象傳遞給它。是否可以這樣做?
不這樣做。哈希碼不是唯一的。你應該使用大對象;它不會造成任何傷害。 – SLaks 2011-02-10 15:27:09
@SLaks:假設我使用ToString()而不是GetHashCode()。 – Bullines 2011-02-10 15:29:16