Кортеж - это не анонимный тип, это именованный тип. Вы можете использовать его в качестве возвращаемого типа или аргумента метода. Этот код действителен:
Tuple<int, string> GetTuple()
{
return Tuple.Create(1, "Bob");
}
Вы не можете сделать это с анонимным типом, вместо этого вам придется вернуть System.Object
. Как правило, вам приходится использовать Reflection для этих объектов (или dynamic
в .NET 4) для получения значений отдельных свойств.
Кроме того, как упоминает Брайан, имена свойств в Tuple
являются фиксированными - они всегда Item1
, Item2
, Item3
и т. Д., Тогда как с анонимным типом вы можете выбирать имена , Если вы напишите:
var x = new { ID = 1, Name = "Bob" }
Тогда анонимный тип на самом деле имеет свойства ID
и Name
. Но если вы напишите:
Tuple.Create(1, "Bob")
Тогда полученный кортеж просто имеет свойства Item1
и Item2
.