В C #, когда вы пишете (1, "hello", 1.0f)
, вы создаете кортеж типа ValueTuple<int, string, float>
или короче (int, string, float)
, и его нельзя использовать взаимозаменяемо с таким классом, как
class NotTuple
{
public int PropInt { get; set; }
public string PropString { get; set; }
public float PropFloat { get; set; }
}
(Потому что они имеют другой тип!)
Поэтому, когда вы делаете
.Select(x => (
x.ItemDescription,
x.Quantity,
x.UnitPrice,
x.Price = TotalValue((int)x.Quantity, (float)x.UnitPrice)
))
, вы создаете IEnumerable<(string, int, float, float)>
, а не IEnumerable<Item>
. Позже, когда вы вызываете .ToList()
, IEnumerable расходуется и материализуется до List<(string, int, float, float)>
, который не взаимозаменяем с List<Item>
.