3

如果我有这个 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

4 回答 4

1

有什么会阻止您使用标准的 LinqFirstOrDefault()方法,如下所示:

var item = OnlineUsers.FirstOrDefault(kvp => kvp.Key.Context == myContext);
于 2012-09-21T19:30:10.597 回答
1

怎么样

var ou = OnlineUsers.First(x => x.Key.Context == "TADA");
于 2012-09-21T19:35:04.330 回答
0

干得好:

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");
于 2012-09-21T19:41:13.503 回答
0

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

如果您只进行一次或两次搜索,或者映射会经常更改以至于您无法使字典保持最新,那么您可以简单地使用foreach循环对字典进行线性搜索,或者使用 LINQ 方法,例如Firstor Where,如其他答案所示。

于 2012-09-21T19:36:08.457 回答