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