2009-10-05 6 views
3

Puis-je créer une variable de type anonyme et, plus tard, ajouter d'autres propriétés?Création de variables de types anonymes dynamiques

E.g. var x = new { Name = "Ahmed" }; et que vous voulez ajouter Age? comment puis-je faire cela?

Une autre question: j'ai vu sur certains blogs un type AnonymousType quel est l'espace de nom pour cette classe? voici un exemple http://www.codeproject.com/KB/cs/AnonymousTypesInCSharp.aspx

+3

Un tel objet est souvent appelé "objet expando". C# n'implémente pas * les objets expando, bien que C# 4 supportera * l'appel * des objets expando via le mot-clé "dynamic". Pensez à utiliser Python ou JScript ou un autre langage supportant nativement les objets expando si c'est ce dont vous avez besoin. –

Répondre

6

Première question - vous ne pouvez pas.

Deuxième question - AnonymousType est le type que l'auteur de cet article a créé. Vous devez télécharger la source de son projet pour utiliser ce type.

0

Non, vous ne pouvez pas.

2ème question: Rien de tel, il pourrait se référer à la classe générée par le compilateur auquel vous n'avez pas accès.

0

Non, et ce ne serait pas efficace pour votre application. Êtes-vous convaincu que vous ne voulez pas introduire une classe quelconque?

using System; 
class Generic{ 

    public void doSomething(){} 

    private string name; 
    private string _othreFeature; 

} 

Vous pouvez l'étendre avec de nouvelles fonctionnalités, quand vous le souhaitez.

0

Ceci est une question parfaitement logique ... Je travaille avec Java et C# à la fois et c'est une grosse bête noire de la mienne ... En fait, presque toutes les langues ont une sorte de type Anonymous lol ... PHP, JavaScript, C#, vb (tous), et la liste continue ..

C'est une fonctionnalité très utile lorsque vous envoyez des données dans un objet et que vous n'avez pas besoin d'une classe pour cela. .

De fait, c'est exactement ce que LINQ utilise ..

var someObject (can be interable/Enumerable) = 
    from p in products 
    where p.id == 123 
    select new { productid }; 

bla bla vous avez l'idée .. Il est très utile ... :-)

Cheers!

+0

Je sais que c'est très vieux, mais votre dernière ligne semble être dans l'erreur et je clarifie juste pour d'autres lecteurs. Si vous voulez simplement l'ID de produit d'une instruction LINQ, vous n'utilisez pas select (prod => new {prod.ID}), vous devez simplement sélectionner (prod =? Prod.ID} qui n'utilise pas anonyme Si vous vouliez plutôt associer le nom avec l'ID, alors oui, vous utiliseriez un nouveau {prod.Name, prod.ID} qui serait un type anonyme. vieux mais toujours. – MarqueIV

Questions connexes