Est-ce que C# ont tout équivalent pour VB6Quelle est la syntaxe équivalente en C#, le cas échéant?
With
End With
Est-ce que C# ont tout équivalent pour VB6Quelle est la syntaxe équivalente en C#, le cas échéant?
With
End With
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.
Comment la construction anonyme est-elle liée aux blocs? (Le demandeur fait clairement référence au bloc.) –
@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#. –
Oh je vois. J'ai confondu les syntaxes anonymes et d'initialisation. –
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
}
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.
Il n'existe aucun équivalent C# au mot clé With
de Visual Basic.
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"
}
};
Il n'y a pas d'équivalent en C# -> lire la suite ici dans les commentaires http://blogs.msdn.com/b/csharpfaq/archive/2004/03/11/why-doesn-t-c-have-vb-net-s-with-operator.aspx
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 ...
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;
}
C'est une question que vous devriez lire http://stackoverflow.com/questions/283749/the-vb-net-with-statement-embrace-or-avoid –
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. –