gpt4 book ai didi

c# - ConcurrentDictionary.GetOrAdd() : valueFactory with different signature

转载 作者:太空宇宙 更新时间:2023-11-03 20:36:11 24 4
gpt4 key购买 nike

我有一个 ConcurrentDictionary:

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 对象传递给它。有可能这样做吗?

最佳答案

使用大对象作为键没有错。

除非对象是一个struct(而且它不应该是一个struct),否则它永远不会被复制。
如果您打算稍后查找内容,您的对象显然会保持不变,因此您不会泄漏内存。

只要您有合理的(或继承的)GetHashCode()Equals() 实现,就不会有任何性能影响。

关于c# - ConcurrentDictionary.GetOrAdd() : valueFactory with different signature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4958977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com