2016-12-15 11 views
17

Глядя на новый C# 7.0 ValueTuples, мне интересно, полностью ли они заменит Anonymous Types. Я понимаю, что ValueTuples являются структурами и поэтому ведут себя немного иначе, чем Anonymous Types, которые являются классами. Однако я не вижу прецедента, в котором я бы предпочел использовать Anonymous Type по адресу ValueTuple.C# 7.0 ValueTuples против анонимных типов

Есть ли какие-либо прецеденты, в которых использование Anonymous Type по-прежнему выгодно с использованием ValueTuples в C# 7.0?

+0

Возможный дубликат [Анонимный тип и кортеж] (http://stackoverflow.com/questions/2613829/anonymous-type-and-tuple) –

+7

@ SørenD.Ptæus Этот вопрос относится к 'Tuple', а не к C# 7.0 'ValueTuple'. 'ValueTuple' действует намного иначе, чем' Tuple'. –

+0

Вы пробовали использовать ValueTuples в запросах Linq (у меня нет компилятора C# 7, чтобы попробовать) – Console

ответ

12

Анонимные типы неизменяемы, кортежи - нет. Это отражается в том, что анонимные типы выставляют свойства, кортежи выставляют поля. Связывание данных почти всегда требует свойств.

Много существующего кода работает только со ссылочными типами, а не с типами значений. В частности, возникает вопрос о прогнозах в Entity Framework: прогнозы для типов значений просто не реализованы.

+1

Для ответа на этот вопрос потребуется много информации. Однако я не думаю, что он слишком широк. Это может быть хорошим кандидатом для [community wiki] (http://stackoverflow.com/help/privileges/community-wiki). –

+0

Хотя хороший ответ, я не вижу, как он отвечает на вопрос OPs, что «есть ли какой-либо вариант использования, который будет использоваться над другим». –

+3

@YuvalItzchakov Eh? Если вы используете привязку данных, которая требует свойств, вам требуются типы, которые имеют свойства, то есть вы не можете использовать новые кортежи. Если вы используете проекции в EF, вам нужно использовать ссылочные типы, вы не можете использовать новые кортежи. Как это не дает двух очень конкретных случаев, когда вы можете использовать анонимные типы, но не новые кортежи? – hvd