我觉得好像我必须错过一些非常明显的东西,或者C# is simply lacking我所期望的功能。
编程中通常有三个for
循环。
#1 for (iterator; limit; increment) {}
在每次循环后递增iterator
,直到达到极限为止。
#2 for (key in object) {}
在对象的每个条目处分配key
对的左半部分的值。
#3 key:value
在对象的每个条目处为foreach (value in object) {}
对的{strong>右半值分配value
。
我知道key:value
可以使用KeyValuePair<TKey,TValue>
,但这需要为foreach
和 {{1} }。我不在乎该值,也不需要对它进行数据类型化。
C##2 key
在哪里?
答案 0 :(得分:1)
您可以执行foreach (var key in object.keys)
(假设对象是Dictionary
):
Dictionary<object, object> dict = new Dictionary<object, object>();
foreach (var key in dict.Keys)
{
var value = dict[key]; //Not required
}
您也可以遍历Values
而不是Keys
...,但是当然不可能检索相应的密钥。
答案 1 :(得分:0)
除@MikeH外,
如果您打算遍历纯对象以获取变量名作为键,并将其值作为值,则可以通过反射来实现。这是例子
public class Test
{
public string Prop1 {get; set;}
public string Prop2 {get; set;}
public string Prop3 {get; set;}
public string Prop4 {get; set;}
}
public class Program
{
public static void Main()
{
var test = new Test(){
Prop1 = "Test1",
Prop2 = "Test2",
Prop3 = "Test3",
Prop4 = "Test4"
};
foreach (var property in test.GetType().GetProperties())
{
Console.WriteLine("{0} = {1}", property.Name, property.GetValue(test));
}
}
}
此外,如果您想再次使用字典,可以使用
var dict = test.GetType().GetProperties().ToDictionary(x => x.Name, x=> x.GetValue(test));
foreach (var key in dict.Keys)
Console.WriteLine("{0} = {1}", key, dict[key]);