4

我有一堆来自数据库的结果,我保存在Dictionary<int, Result>().

我拥有的 Result 类是:

public int Id { get; set; }
public string something { get; set; }
public string somethingtwo { get; set; }
public string somethingthree { get; set; }
public DateTime Posted { get; set; }
public string Location { get; set; }
public bool somethingfour { get; set; }

所以,Dictionary<int, Result>里面有很多结果,我想迭代它们。我该怎么做?我尝试了几种方法,但即使我知道它们也行不通。

我想做这样的事情:

foreach(var result in resultDict)
{
   mynewstring = result.Location;
   mynewstringtwo = result.Posted;
   // etc etc.
}
4

8 回答 8

7
foreach(var kvp in resultsDict) {
    //Do somethign with kvp
    UseResult(kvp.Value); //kvp.Value is a Result object
    UseKey(kvp.Key); //kvp.Key is the integer key you access it with
}

在上面的代码kvp中是一个KeyValuePair<int, Result>. 您可以访问KeyValue属性以获取 的整数键DictionaryResult与之关联的值Key。我将把它作为一个练习/猜谜游戏让你弄清楚哪个属性是哪个!;-)

正如@Wiktor 所提到的,您还可以访问字典ValuesKeys集合来做同样的事情,但是取而代之的是检索intValue属性的序列。

使用其他集合的替代方案:

foreach(var val in resultsDict.Values) {
    // The key is not accessible immediately,
    // you have to examine the value to figure out the key
    UseResult(val); //val is a value.
}

foreach(var key in resultsDict.Keys) {
    //The value isn't directly accessible, but you can look it up.
    UseResult(resultsDict[key]);
    UseKey(key);
}
于 2012-05-22T19:00:56.940 回答
4

Dcitionary 有一个名为 Values 的 ValueCollection,因此代码为:

foreach (Result r in dict.Values)
{
    mynewstring = result.Location;
    mynewstringtwo = result.Posted;
}
于 2012-05-22T19:05:22.880 回答
1
var dictionary = ...;
foreach ( var result in dictionary.Values )
{
   ...
}

那是你需要的吗?

于 2012-05-22T19:01:50.697 回答
0

您可以使用该Values属性来迭代 a 的值Dictionary(另请参阅MSDN 页面)。

代码示例:

// Your dictionary
var myResultDictionary = new Dictionary<int, Result>();

foreach (var item in myResultDictionary.Values)
{
    // "item" holds a Result object
    // Do something with item
}

您也可以定期循环您的Dictionary, 但是item将是一个KeyValuePairMSDN 页面)对象。您可以使用Value变量 item 上的属性访问该值。

代码示例:

// Your dictionary
var myResultDictionary = new Dictionary<int, Result>();

foreach (var item in myResultDictionary)
{
    // "item" holds a KeyValuePair<int, Result> object
    // You can access the value (a Result object) by calling "item.Value"
    // Do something with item
}
于 2012-05-22T19:02:19.263 回答
0

您可以迭代 Dictionary.Values,这将与其他任何IEnumerable<Result>

或者,您可以遍历 Dictionary,这是一个IEnumerable<KeyValuePair<int, Result>>

于 2012-05-22T19:02:39.850 回答
0
foreach (KeyValuePair<int,Result> item in dictionary)
            {
                //do stuff
            }
于 2012-05-22T19:03:11.130 回答
0
foreach(KeyValuePair<int,result> keyValue in yourDictionary)
{
    Debug.WriteLine(keyValue.Value);
    //or
    Debug.WriteLine(keyValue.Key);
}

或相同的东西,但使用 var:

foreach(var keyValue in yourDictionary)
{
    Debug.WriteLine(keyValue.Value);
    //or
    Debug.WriteLine(keyValue.Key);
}

^^ 同样的事情,但 var 动态计算出它自己的类型

或者你可以这样做,如果你只需要结果:

foreach(var result in yourDictionary.Values)
{
    Debug.WriteLine(result);
}
于 2012-05-22T19:03:32.877 回答
0

foreach在字典上使用 a :

foreach (var keyValue in dictionary) { //Use key value here }

于 2012-05-22T19:06:13.550 回答