2015-08-24 2 views
4

Я хочу добавить один за другим значения, но в цикле, как я могу перебирать через значения один за другим и добавлять его в словарь.Как выполнить итерацию через коллекцию IEnumerable, использующую для каждого или foreach?

IEnumerable<Customer> items = new Customer[] 
{ 
    new Customer { Name = "test1", Id = 111}, 
    new Customer { Name = "test2", Id = 222} 
}; 

Я хочу добавить { Name = "test1", Id = 111} когда i=0 и хотите добавить { Name = "test2", Id = 222} при i=1 п так далее ..

Сейчас я добавляю полную коллекцию в каждом ключе. (Хотите достичь с помощью этого Еогеасп или 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) }); 
    } 
} 
+2

Не на компьютере прямо сейчас, но я предположил бы, что вы могли бы Foreach это так: Еогеасп (KeyValuePair <Настройки, TypeOf (T) .Name> элемент в словаре) { // Делайте материал с помощью элемента item.Key и item.Value }, если компилятор не скажет вам и не позвонит мне неправильно. –

+0

В чем смысл параметра «string Key»? – knagaev

+0

@knagaev извините за путаницу обновлено .. – Neo

ответ

1

Новой версия

var dictionary = items.Zip(Enumerable.Range(1, int.MaxValue - 1), (o, i) => new { Index = i, Customer = (object)o }); 

Кстати, словарь плохое имя для некоторых переменных.

+0

обновленный вопрос, пожалуйста, проверьте – Neo

+0

Если я понял, что вы хотите - простое перечисление? Словарь с ключом индекса и значением объекта из IEnumerable ? – knagaev

2

Если счет является необходимость и IEnumerable будет поддерживаться, то вы можете попробовать это:

int count = 0; 
var enumeratedCollection = collection.GetEnumerator(); 
while(enumeratedCollection.MoveNext()) 
{ 
count++; 
await dictionary.Set(new[] { new KeyValuePair<object,T>(count,enumeratedCollection.Current) }); 
} 
+2

И где это 'i' в вашей петле foreach? ;) – DangerousDetlef

+0

@ обновленный вопрос, пожалуйста, проверьте – Neo

-2

Значит, вы хотите элемент из коллекции в словарь в цикле for? Если вы добавили IEnumerable в список или массив, вы можете легко получить к нему доступ через индекс. Например, вот так: Редактировать: Код сначала создавал список каждый раз, когда он зацикливался, чего, конечно же, следует избегать.

var list = collection.ToList(); //ToArray() also possible 
for (int i = 0; i < list.Count(); i++) 
{ 
    dictionary.Add(i, list[i]); 
} 

Я не 100%, если это то, что вам нужно. Более подробная информация по вашему вопросу будет замечательной.

+4

Это ужасно. Вы создаете список каждый раз, когда вы петли –

+0

Я даже не знаю, правильно ли я получил его вопрос, я просто написал несколько кода, чтобы показать ему, как это сделать. Я отредактирую его, потому что вы, конечно, правы, и список не должен создаваться на каждой итерации. – DangerousDetlef

+0

@ обновленный вопрос, пожалуйста, проверьте – Neo

0

я сделал с помощью

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) }); 
       }