Sdílet prostřednictvím


Anonymní typy (Příručka programování C#)

Anonymní typy poskytují pohodlný způsob, aniž by nejprve explicitně definovat typ zapouzdření sadu vlastností, jen pro čtení do jednoho objektu.Název typu je generovaný kompilátorem a není k dispozici na úrovni zdrojového kódu.Každá vlastnost typ je odvodit kompilátorem.

Vytvořit anonymní typy pomocí nové operátor spolu s inicializátor objektu.Další informace o objektu Inicializátory viz Objekt a kolekce Inicializátory (Příručka programování C#).

Následující příklad ukazuje anonymní typ je inicializován s dvě vlastnosti s názvem Amount a Message.

var v = new { Amount = 108, Message = "Hello" };

// Rest the mouse pointer over v.Amount and v.Message in the following
// statement to verify that their inferred types are int and string.
Console.WriteLine(v.Amount + v.Message);

Anonymní typy se obvykle používají v Vyberte klauzule dotazu výraz vracet každý objekt v pořadí zdroje podmnožina vlastností.Další informace o dotazech naleznete v LINQ dotazu výrazy (Příručka programování C#).

Anonymní typy obsahují jeden nebo více veřejných čtení vlastnosti.Další typy členů třídy, jako jsou například metody nebo události, jsou platná.Výraz, který slouží k inicializaci vlastnost nemůže být null, anonymní funkce nebo typ ukazatele.

Nejběžnější scénář je inicializace anonymní typ vlastnosti z jiného typu.V následujícím příkladu se předpokládá třída existuje s názvem Product.Třída Product zahrnuje Color a Price vlastnosti spolu s další vlastnosti, které vás zajímají není.Proměnná products je kolekce Product objektů.Anonymní typ prohlášení začíná new klíčové slovo.Prohlášení inicializuje nový typ, který používá pouze dvě vlastnosti z Product.To způsobuje menší objem dat vrácených v dotazu.

Pokud nezadáte názvy členů v anonymní typ, kompilátor poskytuje členům anonymní typ stejný název jako vlastnost inicializace je používán.Je nutné zadat název vlastnosti inicializovaného s výrazem, jak je znázorněno v předchozím příkladu.V následujícím příkladu jsou názvy vlastností anonymní typ Color a Price.

var productQuery = 
    from prod in products
    select new { prod.Color, prod.Price };

foreach (var v in productQuery)
{
    Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price);
}

Obvykle použijete anonymní typ proměnné inicializovat, když deklarujete proměnnou jako implicitně zadaný místní proměnné pomocí var.Název typu nelze zadat v deklaraci proměnné, protože pouze kompilátor má přístup k podkladové název anonymní typ.Pro více informací o var si prohlédněte Implicitně zadali místní proměnné (C# programování Guide).

Matice anonymně typové prvky můžete vytvořit kombinací implicitně zadaný místní proměnné a implicitně zadaného pole, jak ukazuje následující příklad.

var anonArray = new[] { new { name = "apple", diam = 4 }, new { name = "grape", diam = 1 }};

Poznámky

Anonymní typy jsou třídy typy, které vyplývají přímo z objektu, a který nelze přetypovat na libovolný typ kromě objektu.Kompilátor poskytuje název pro každý typ anonymní, přestože nelze aplikaci přístup.Z hlediska společného jazykového modulu runtime anonymní typ se neliší od ostatních typ odkazu.

Pokud dva nebo více typů anonymní stejné sestavení mají stejný počet a typ vlastnosti, ve stejném pořadí, budou kompilátor zpracovává jako stejného typu.Sdílejí stejné informace o typu generovaných kompilátorem.

Pole, vlastnosti, události nebo návratový typ metody jako anonymní typ nelze deklarovat.Podobně nelze deklarovat formálních parametrů metody, vlastnosti, konstruktor nebo indexovacího členu jako anonymní typ.Chcete-li předat anonymní typ nebo kolekci obsahující anonymní typy jako argument pro metodu, můžete parametr deklarovat jako typ objektu.Tím však účinně chrání před účelem silné psát.Pokud musí ukládat výsledky dotazu nebo předejte mimo hranice metoda, zvažte použití třídy nebo struct běžným názvem namísto anonymní typ.

Protože Equals a GetHashCode metod na anonymní typy jsou definovány podle Equals a GetHashcode metod, vlastností, dvě instance stejného typu anonymní rovnají pouze v případě, že jejich vlastnosti jsou stejné.

Viz také

Referenční dokumentace

Objekt a kolekce Inicializátory (Příručka programování C#)

Koncepty

Příručka programování C#

LINQ dotazu výrazy (Příručka programování C#)

Další zdroje

Začínáme s LINQ v jazyce C#