如何使用 for each 或 foreach 遍历 IEnumerable 集合?
How to iterate through IEnumerable collection using for each or foreach?
我想一个一个地添加值但是在for循环中我该如何迭代
通过一个一个的值并将其添加到字典中。
IEnumerable<Customer> items = new Customer[]
{
new Customer { Name = "test1", Id = 111},
new Customer { Name = "test2", Id = 222}
};
我想在 i=0
时添加 { Name = "test1", Id = 111}
并想在 i=1
n 时添加 { Name = "test2", Id = 222}
等..
现在我正在每个键中添加完整集合。(想使用 foreach 或 forloop 实现此目的)
public async void Set(IEnumerable collection)
{
RedisDictionary<object,IEnumerable <T>> dictionary = new RedisDictionary>(Settings, typeof(T).Name);
// Add collection to dictionary;
for (int i = 0; i < collection.Count(); i++)
{
await dictionary.Set(new[] { new KeyValuePair<object,IEnumerable <T> ( i ,collection) });
}
}
如果需要计数并且要维护IEnumerable,那么你可以试试这个:
int count = 0;
var enumeratedCollection = collection.GetEnumerator();
while(enumeratedCollection.MoveNext())
{
count++;
await dictionary.Set(new[] { new KeyValuePair<object,T>( count,enumeratedCollection.Current) });
}
所以你想在 for 循环中将集合中的一个项目添加到字典中?
如果将 IEnumerable
转换为列表或数组,则可以通过索引轻松访问它。例如像这样:
编辑:代码首先在每次循环时创建一个列表,当然应该避免这种情况。
var list = collection.ToList(); //ToArray() also possible
for (int i = 0; i < list.Count(); i++)
{
dictionary.Add(i, list[i]);
}
不过,如果您需要的话,我不是 100% 能做到。你的问题的详细信息会很好。
新版本
var dictionary = items.Zip(Enumerable.Range(1, int.MaxValue - 1), (o, i) => new { Index = i, Customer = (object)o });
顺便说一下,dictionary 对某些变量来说是个错误的名字。
我用完了
string propertyName = "Id";
Type type = typeof(T);
var prop = type.GetProperty(propertyName);
foreach (var item in collection)
{
await dictionary.Set(new[] { new KeyValuePair<object, T>(prop.GetValue(item, null),item) });
}
我想一个一个地添加值但是在for循环中我该如何迭代 通过一个一个的值并将其添加到字典中。
IEnumerable<Customer> items = new Customer[]
{
new Customer { Name = "test1", Id = 111},
new Customer { Name = "test2", Id = 222}
};
我想在 i=0
时添加 { Name = "test1", Id = 111}
并想在 i=1
n 时添加 { Name = "test2", Id = 222}
等..
现在我正在每个键中添加完整集合。(想使用 foreach 或 forloop 实现此目的)
public async void Set(IEnumerable collection)
{
RedisDictionary<object,IEnumerable <T>> dictionary = new RedisDictionary>(Settings, typeof(T).Name);
// Add collection to dictionary;
for (int i = 0; i < collection.Count(); i++)
{
await dictionary.Set(new[] { new KeyValuePair<object,IEnumerable <T> ( i ,collection) });
}
}
如果需要计数并且要维护IEnumerable,那么你可以试试这个:
int count = 0;
var enumeratedCollection = collection.GetEnumerator();
while(enumeratedCollection.MoveNext())
{
count++;
await dictionary.Set(new[] { new KeyValuePair<object,T>( count,enumeratedCollection.Current) });
}
所以你想在 for 循环中将集合中的一个项目添加到字典中?
如果将 IEnumerable
转换为列表或数组,则可以通过索引轻松访问它。例如像这样:
编辑:代码首先在每次循环时创建一个列表,当然应该避免这种情况。
var list = collection.ToList(); //ToArray() also possible
for (int i = 0; i < list.Count(); i++)
{
dictionary.Add(i, list[i]);
}
不过,如果您需要的话,我不是 100% 能做到。你的问题的详细信息会很好。
新版本
var dictionary = items.Zip(Enumerable.Range(1, int.MaxValue - 1), (o, i) => new { Index = i, Customer = (object)o });
顺便说一下,dictionary 对某些变量来说是个错误的名字。
我用完了
string propertyName = "Id";
Type type = typeof(T);
var prop = type.GetProperty(propertyName);
foreach (var item in collection)
{
await dictionary.Set(new[] { new KeyValuePair<object, T>(prop.GetValue(item, null),item) });
}