#c# #linq #generics #extension-methods
#c# #linq #универсальные методы #расширение-методы
Вопрос:
Давайте просто скажем, что я хотел бы выполнить итерацию по string[][]
, добавить значение с использованием анонимного типа и выполнить общий метод расширения для каждого результата (блестящий пример, я знаю, но я полагаю, вы поймете суть этого!).
Вот мой код:
//attrs = some string[][]
attrs.Select(item => new { name = HttpContext.GetGlobalResourceObject("Global", item[0].Remove(0, 7)), value = item[1] })
.ForEach</*????*/>(/*do stuff*/);
Что именно я бы поместил в параметр типа ForEach?
Вот как выглядит ForEach:
public static void ForEach<T>(this IEnumerable<T> collection, Action<T> act)
{
IEnumerator<T> enumerator = collection.GetEnumerator();
while (enumerator.MoveNext())
act(enumerator.Current);
}
Ответ №1:
Вам не нужно указывать тип явно, поскольку он может быть выведен из предоставленных параметров:
attrs.Select(item => new
{
name = HttpContext.GetGlobalResourceObject("Global",
item[0].Remove(0, 7)),
value = item[1]
})
.ForEach(x => x.name = "something");
Комментарии:
1. Пожалуйста, прочтите мой ответ еще раз. Это отвечает на ваш вопрос. Суть в том, чтобы вывести тип . В моем примере
x
имеет этот анонимный тип.2. Ну что ж, это правда! Спасибо за это, приму, как только смогу. Кроме того, явное указание типа просто было бы невозможно, не так ли?
3. Точно. Вы не можете указать его явно.