如果我有这个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
进行“查找”。感谢。
答案 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
循环,或使用First
或Where
等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");