从ConcurrentDictionary获取值

时间:2012-09-21 19:26:35

标签: c# concurrentdictionary

如果我有这个ConcurrentDictionary:

public class User
{
    public string Context { get; set; }
    public bool Owner { get; set; }
}

protected static ConcurrentDictionary<User, string> OnlineUsers = new ConcurrentDictionary<User, string>();

如果我已经拥有Owner的值,有谁知道如何获得Context的值?基本上我想使用Context进行“查找”。感谢。

4 个答案:

答案 0 :(得分:1)

是否有任何事情阻止您使用标准的Linq FirstOrDefault()方法:

var item = OnlineUsers.FirstOrDefault(kvp => kvp.Key.Context == myContext);

答案 1 :(得分:1)

这样的东西
var ou = OnlineUsers.First(x => x.Key.Context == "TADA");

答案 2 :(得分:0)

听起来你需要一个Dictionary<string, User>,当给定上下文为string时,它会告诉你它对应哪个User。如果您需要多次执行此查找,并且使用额外内存没有问题,则可能需要创建此类字典。

如果您只是要进行一次或两次搜索,或者映射会经常更改,以至于无法使字典保持最新,那么您只需使用一个字典对字典进行线性搜索foreach循环,或使用FirstWhere等LINQ方法,如其他答案所示。

答案 3 :(得分:-1)

你走了:

ConcurrentDictionary<User, string> dict = new ConcurrentDictionary<User, string>();

dict.TryAdd(new User() { Context = "a", Ownder = false }, "aa");
dict.TryAdd(new User() { Context = "b", Ownder = false }, "bb");
dict.TryAdd(new User() { Context = "c", Ownder = true }, "cc");
dict.TryAdd(new User() { Context = "d", Ownder = false }, "dd");

IEnumerable<User> list = dict.Keys.Where(p => p.Context == "a");