:ConcurrentDictionary.GetOrAdd():私はConcurrentDictionary有する異なる署名を有する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オブジェクトを渡すことができないように見えます。そうすることは可能ですか?
それをしないでください。 HashCodeは一意ではありません。大きなオブジェクトを使用する必要があります。それはどんな害もしません。 – SLaks
@SLaks:GetHashCode()の代わりにToString()を使用するとします。 – Bullines
** **ただしないでください。 – SLaks