在迭代KeyValuePair以外的其他内容时如何输出字典值

时间:2015-12-04 01:26:10

标签: c# list dictionary

我知道当值是List时如何从字典输出键和值,当我使用foreach(KeyValuePair<string,List<int>> test in myDictionary)迭代字典时,但是如果我必须使用不同类型的循环,如下例所示,我不确定如何正确获取值。

我在列表中进行迭代,但是使用字典,因为我按字母顺序排序。我知道还有其他方法可以做到这一点,这不是我的问题。

所以,我试图根据密钥按字母顺序输出密钥及其值。

string string1 = "A_list1";
List<int> list1 = new List<int> { 1, 2, 3 };

string string2 = "B_list2";
List<int> list2 = new List<int> { 4, 5, 7 };

string string3 = "C_list3";
List<int> list3 = new List<int> { 8, 9, 10 };

Dictionary<String, List<int>> myDictionary = new Dictionary<string, List<int>>();

myDictionary.Add(string2, list1);
myDictionary.Add(string1, list2);
myDictionary.Add(string3, list3);

var sortedAlphabeticallyMyDictionary = myDictionary.Keys.ToList();
sortedAlphabeticallyMyDictionary.Sort();

foreach (string myString in sortedAlphabeticallyMyDictionary)
{
    MessageBox.Show("Key: " + myString + "\n" + "Value: " + myDictionary[myString] );
}

输出

Key: A_list1
Value: System.Collections.Generic.List`1[System.Int32]

Key: B_list2
Value: System.Collections.Generic.List`1[System.Int32]

Key: C_list3
Value: System.Collections.Generic.List`1[System.Int32]

输出很有意义,因为如果你有一个包含List的Dictionary,你必须作为KeyValuePair迭代才能得到实际的列表,但我是超级C#noob,并且不确定如何在此实例中正确获取List。

感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

您可以通过以下方式将public class ApplicationUserLogin : IdentityUserLogin<int> { } public class ApplicationUserRole : IdentityUserRole<int> { } public class ApplicationUserClaim : IdentityUserClaim<int> { } public class ApplicationUser : IdentityUser<int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim> { } 转换为字符串表示形式:

public class DomainEntity : .....
{
    [Key]
    public virtual int Id { get; set; }
    public virtual ApplicationUser CreatedBy { get; set; }

    public virtual ApplicationUser LastUpdatedBy { get; set; }

}

所以你可以使用这段代码:

 UserManager<ApplicationUser, int>

不要忘记添加public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>

答案 1 :(得分:2)

默认情况下,当您将对象连接到字符串时,框架会为您在对象上执行对ToString的隐式调用。正如您所知,基类ToString中的object的默认实现只返回带有类型信息的字符串。如果你想要列表的任何替代字符串表示,你需要自己生成该字符串(例如:通过调用接收列表并返回字符串的方法)。

MessageBox.Show("Key: " + myString + "\n" + "Value: " + GetListAsString(myDictionary[myString]));

然后:

private static string GetListAsString(List<int> list) {
    StringBuilder builder = new StringBuilder();
    string commaSep = ", ";
    string sep = "";
    foreach (int val in list) {
        builder.Append(sep);
        builder.Append(val);
        sep = commaSep;
    }
    return builder.ToString();
}

在旁注中,如果您想要一组有序的键,每个键都有一个关联的值,那么SortedDictionary就是您要找的。