2016-12-15 45 views
17

Patrząc na nowe C# 7.0 ValueTuples, zastanawiam się, czy całkowicie zastąpią one Anonymous Types. Rozumiem, że ValueTuples są strukturami i dlatego zachowują się nieco inaczej niż Anonymous Types, które są klasami. Nie widzę jednak przypadku użycia, w którym wolałbym używać Anonymous Type niż ValueTuple.C# 7.0 ValueTuples vs Anonymous Types

Czy są jakieś przypadki użycia, w przypadku korzystania z Anonymous Type nadal byłoby korzystne korzystanie z ValueTuples w C# 7.0?

+0

Prawdopodobny duplikat [typ anonimowy i krotka] (http://stackoverflow.com/questions/2613829/anonymous-type-and-tuple) –

+7

@ SørenD.Ptæus To pytanie dotyczy "krotki", a nie C# 7.0 'ValueTuple'. 'ValueTuple' działa znacznie inaczej niż' Tuple'. –

+0

Czy próbowałeś używać ValueTuples w zapytaniach Linq (nie mam pod ręką kompilatora C# 7, aby go wypróbować) – Console

Odpowiedz

12

Anonimowe typy są niezmienne, krotki nie. Znajduje to odzwierciedlenie w tym, że anonimowe typy ujawniają właściwości, krotki eksponują pola. Powiązanie danych prawie zawsze wymaga właściwości.

Wiele istniejących kodów działa tylko z typami odniesienia, a nie z typami wartości. Co w szczególności przychodzi na myśl to prognozy w Entity Framework: projekcje do typów wartości nie są po prostu implementowane.

+1

Odpowiedź na to pytanie wymagałaby wielu informacji. Jednak nie sądzę, że jest zbyt szeroki. To może być dobry kandydat do [społeczności wiki] (http://stackoverflow.com/help/privileges/community-wiki). –

+0

Mimo dobrej odpowiedzi, nie widzę, jak odpowiada na pytanie OP, jak "Czy jest jakikolwiek przypadek użycia jednego z nich nad drugim". –

+3

@YuvalItzchakov Eh? Jeśli używasz powiązania danych, które wymaga właściwości, potrzebujesz typów, które mają właściwości, co oznacza, że ​​nie możesz używać nowych krotek. Jeśli używasz rzutów w EF, musisz użyć typów referencji, nie możesz użyć nowych krotek. W jaki sposób nie daje to dwóch bardzo konkretnych przypadków, w których można używać anonimowych typów, ale nie nowych krotek? – hvd