1

我从一年前开始使用 VB.NET,现在我必须在另一个使用 C# 的项目中工作,但我找不到这个等价物。

在 VB.NET 中

Dim dictionary As Dictionary(Of String, Decimal)
Dim oPerson As Person = Nothing
Dim key as string = "SomeValue"

If dictionary.ContainsKey(key) Then
oPerson = dictionary.Item(key)
End If

在 C# 中执行此操作的最佳方法是什么?

我发现了类似的东西,但我不知道是否是最好的方法。

Person oPerson = dictionary.Where(z => z.Key == key).FirstOrDefault().Val
4

5 回答 5

5

可能是这样的:

Dictionary<String, Person> dictionary = new Dictionary<String, Person>();

...  

Person oPerson = null;
String key = "SomeValue";

if (dictionary.TryGetValue(key, out oPerson)) {
    // Person instance is found, do something with it
}
于 2013-08-02T08:00:20.057 回答
2
Dictionary<string, decimal> dictionary = null;
Person oPerson = null;
string key = "SomeValue";

if (dictionary.ContainsKey(key)) {
    oPerson = dictionary[key];
}
Dictionary<string, decimal> dictionary = null;
Person oPerson = null;
string key = "SomeValue";

if (dictionary.ContainsKey(key)) {
oPerson = dictionary[key];
}
于 2013-08-02T07:59:28.540 回答
0

字典 dictobj = new Dictionary(); dictobj.Add(1,123); dictobj.Add(2,345);

       var a = dictobj.Where(x => x.Key == 1).First().Value;
于 2013-08-02T08:01:01.313 回答
0

如果他可以使用 Linq 获取数据,则 OP 答案几乎已经存在。因为条件只有一个键,所以 Where 条件就足够了,否则你可以使用 .Contains 来表示多个条件。

Person oPerson =new Person();    
var a= dictionary.Where(z => z.Key == key).FirstOrDefault();
if (a.Count() > 0)
{
   oPerson.ABC =  a.FirstOrDefault().Value;
}
于 2013-08-02T08:17:23.187 回答
0

有两种方法可以解决这个问题:

如果字典中不存在该键,这将引发异常(异常不是坏事!)

var value = dictionary["key"] as Person;

如果要先检查密钥是否存在:

Person person = null;
if(!dictionary.TryGetValue("key", out person))
{
    //Dictionary did not contain value, act accordingly ...
    // ...
}

我想强调一下,异常并不是一件坏事,如果你的应用程序稍后会在字典不包含 Person 的情况下失败,那么一定要抛出异常!

于 2013-08-02T08:22:35.197 回答