и хочет, чтобы я написал вот так: foreach (JObject jFormat in jaFormats.Cast<JObject>()).
Не пойму, если сделать такой каст, то будет каждый раз преобразовываться вся коллекция на каждой итерации или только текущий элемент?
Не должна, и даже не на каждой итерации вроде не будет всё сразу преобразовываться. Такие методы в LINQ это типа как foreach (var item of items) yield doSomething(item)
Только если что-нибудь типа .ToList() вызвать будет вначале вся коллекция создана.
Но на каждой никогда не будет, как и тут
using System;
using System.Collections.Generic;
public class Program
{
private static readonly Random rand = new Random();
public static IEnumerable<int> RandomItems()
{
Console.WriteLine("Generating...");
return new List<int> { rand.Next(100), rand.Next(100) };
}
public static void Main(string[] args)
{
foreach (int item in RandomItems())
{
Console.WriteLine(item);
}
}
}