2009-06-30 6 views
16

Je sais que C# a le mot-clé using, mais using dispose automatiquement de l'objet.Equivalence de "With ... End With" dans C#?

est-il l'équivalence des With...End With en Visual Basic 6.0?

+2

"avec" existait bien avant VB. Il existe en Pascal, pour traiter les types d'enregistrements. Je ne sais pas si Pascal a emprunté l'idée d'ailleurs. – JeffK

Répondre

28

C# n'a pas de construction de langage équivalente pour cela.

+3

c'est vrai. Mais si vous avez une classe avec des méthodes qui retournent 'this', vous pouvez enchaîner les méthodes ensemble. – Dlongnecker

5

Il n'y a pas d'équivalent à Avec ... Fin de dans C#.

est ici pour vous a comparison chart qui illustre les différences entre Visual Basic et C#.

+0

Ce tableau de comparaison est génial. Je travaille sur la transition à C# de VB et cela va être très utile. –

2

Il n'y a pas de structure équivalente en C#. Ceci est une fonctionnalité Visual Basic 6.0/VB.NET.

31

Ce n'est pas équivalent, mais cette syntaxe fonctionnerait-elle pour vous?

Animal a = new Animal() 
{ 
    SpeciesName = "Lion", 
    IsHairy = true, 
    NumberOfLegs = 4 
}; 
+0

"Avec" ne crée pas d'instances, donc c'est faux. –

6

Je pense que l'équivalent de ce qui suit VB:

With SomeObjectExpression() 
    .SomeProperty = 5 
    .SomeOtherProperty = "Hello" 
End With 

Ne serait-ce est C#:

{ 
    Var q=SomeOtherExpression(); 
    q.SomeProperty = 5; 
    q.SomeOtherProperty = "Hello"; 
} 

La seule différence est que dans vb, la identifiant n'a pas de nom "q", mais est simplement un identifiant par défaut utilisé quand une période est rencontrée sans y autre identificateur avant lui.

+1

Qu'est-ce qui se passe avec les curlies extérieures?Désolé, mais ce n'est pas du tout proche de l'équivalent. C'est juste un tas d'appels aux setters. – tomfanning

+2

Les accolades externes définissent la portée de la variable q. A condition que l'expression de l'objet soit une classe plutôt qu'une structure, je pense que le code VB.Net et C# ci-dessus sont presque exactement équivalents. L'instruction précédente est un exemple de la façon dont une instruction with peut être utilisée et la dernière instruction est une traduction C#. L'exemple C# utilise un couple setters car c'est ce que fait l'exemple VB.net arbitrairement choisi. Le point essentiel est que le «avec» équivaut à définir une variable temporaire et à l'utiliser à chaque fois qu'une période est utilisée sans identifiant précédent. – supercat

+0

Ce n'est pas un équivalent, c'est une alternative. –

15

Il n'y a pas d'équivalent, mais je pense que discuter d'une syntaxe pourrait être intéressant!

J'aime bien;

NameSpace.MyObject. 
{ 
    active = true; 
    bgcol = Color.Red; 
} 

Autres suggestions?

Je ne peux pas imaginer que l'ajout de cette fonctionnalité de langue serait difficile, essentiellement juste un prétraité.

EDIT:

J'étais malade d'attendre cette fonction, voici donc et l'extension qui permet d'atteindre un comportement similaire.

/// <summary> 
/// C# implementation of Visual Basics With statement 
/// </summary> 
public static void With<T>(this T _object, Action<T> _action) 
{ 
    _action(_object); 
} 

Utilisation;

LongInstanceOfPersonVariableName.With(x => { 
    x.AgeIntVar = 21; 
    x.NameStrVar = "John"; 
    x.NameStrVar += " Smith"; 
    //etc.. 
}); 

EDIT: Fait intéressant, il semble que quelqu'un m'a battu au poinçon, encore une fois, avec cette "solution". Oh bien ..

+0

Bien que pas exactement la même chose, j'aime votre idée. S'il est utilisé avec une bonne mise en forme, il peut rendre le code plus lisible. – Rudi

+0

Donc, vous avez fini par répéter le nom de la variable. Vous pouvez faire la même chose avec: 'x = LongInstanceOfPersonVariableName; x.AgeIntVar = 21; // etc' – LoBo

+1

Je viens de vomir un peu dans ma bouche. – JJS

Questions connexes