2010-11-29 25 views
7

Est-ce que C# ont tout équivalent pour VB6Quelle est la syntaxe équivalente en C#, le cas échéant?

With 
End With 
+1

C'est une question que vous devriez lire http://stackoverflow.com/questions/283749/the-vb-net-with-statement-embrace-or-avoid –

+1

Le plus proche vous pouvez venir est un * vraiment nom de variable court *. ;) Pour l'initialisation d'objet, voir la réponse de Jon Skeet. –

Répondre

19

Il n'y a rien tout à fait équivalent, mais C# 3 a gagné la possibilité de définir les propriétés de la construction:

var person = new Person { Name = "Jon", Age = 34 }; 

et collections:

var people = new List<Person> 
{ 
    new Person { Name = "Jon" }, 
    new Person { Name = "Holly"} 
}; 

Il est certainement pas un remplacement pour tous les utilisations de With, mais vaut la peine d'être connu pour certains d'entre eux.

+0

Comment la construction anonyme est-elle liée aux blocs? (Le demandeur fait clairement référence au bloc.) –

+1

@Strilanc: Parce qu'avec les blocs sont souvent utilisés pour définir plusieurs propriétés sur un objet nouvellement construit ... et les initialiseurs d'objet sont l'équivalent de * ce * bit en C#. –

+0

Oh je vois. J'ai confondu les syntaxes anonymes et d'initialisation. –

14

C# n'a pas de syntaxe équivalente. Les plus proches sont initialiseurs d'objets, mais ils ne sont pas les mêmes:

var obj = new SomeThing { 
    Height = 100, 
    Text = "Hello, World", 
    ForeColor = System.Drawing.Color.Green 
} 
1

Un quasi-équivalent appelle une méthode membre d'une classe. Vous n'avez pas besoin de nommer à plusieurs reprises l'objet propriétaire dans les membres de la classe - c'est implicite dans le fait que la fonction est un membre appelé pour une instance donnée.

Je doute qu'un équivalent direct de With/End With soit une bonne idée en C# pour cette raison. Si vous vous retrouvez à taper le nom d'un objet à plusieurs reprises dans une portée donnée, c'est une bonne indication que le code en question ferait une bonne méthode sur la classe de cet objet.

2

Il n'existe aucun équivalent C# au mot clé With de Visual Basic.

6

No.

Ce qui se rapproche sont l'objet et liste initializers.

Person p = new Person() 
{ 
    FirstName = "John", 
    LastName = "Doe", 
    Address = new Address() 
    { 
     Street = "1234 St.", 
     City = "Seattle" 
    } 
}; 
1

Il n'y a pas d'équivalent direct. Vous pouvez définir des propriétés sur la construction, comme d'autres l'ont expliqué, ou vous pouvez affecter votre expression à une variable avec un nom court. Ce qui suit devrait être sémantiquement équivalent:

With <expression> 
    .something ... 
    .somethingElse ... 
End With 

var w = <expression>; 
w.something ... 
w.somethingElse ... 
4

Ce n'est en aucun cas un équivalent, cependant, si c'est la frappe que vous essayez de réduire, vous pouvez le faire.

{ 
    var o = myReallyReallyReallyReallyLongObjectName; 
    o.Property1 = 1; 
    o.Property2 = 2; 
    o.Property3 = 3; 
}