2009-06-30 1 views
16

So che C# ha la parola chiave using, ma using elimina automaticamente l'oggetto.Equivalenza di "With ... End With" in C#?

Esiste l'equivalenza di With...End With in ?

+2

"con" effettivamente esistito ben prima di VB. Esiste in Pascal, per gestire i tipi di record. Non so se Pascal ha preso in prestito l'idea da altrove. – JeffK

risposta

28

C# non ha un costrutto linguaggio equivalente per quello.

+3

questo è vero. Ma se hai una classe con metodi che restituiscono "questo", puoi unire i metodi insieme. – Dlongnecker

5

Non c'è l'equivalente a Con ... Termina con C#.

Questo è il a comparison chart per te che illustra le differenze tra Visual Basic e C#.

+0

Quella tabella di confronto è fantastica. Sto lavorando sulla transizione a C# da VB e questo sarà molto utile. –

2

Non esiste una struttura equivalente in C#. Questa è una funzionalità di Visual Basic 6.0/VB.NET.

31

Non è equivalente, ma questa sintassi funzionerà per voi?

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

"Con" non crea istanze, quindi è sbagliato. –

6

penso l'equivalente delle seguenti VB:

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

sarebbe questo è C#:

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

L'unica vera differenza è che in VB, il l'identificatore non ha un nome "q", ma è semplicemente un identificatore predefinito usato quando si incontra un punto senza un y altro identificatore prima di esso.

+1

Che cosa sono i ricci esterni?Ci dispiace, ma questo non è in alcun modo vicino all'equivalente. È solo un mucchio di chiamate agli incastonatori. – tomfanning

+2

Le parentesi esterne impostano l'ambito della variabile q. A condizione che l'espressione dell'oggetto sia una classe piuttosto che una struct, penso che i codici VB.Net e C# sopra siano quasi esattamente equivalenti. La precedente dichiarazione è un esempio di come si potrebbe usare una dichiarazione with, e quest'ultima affermazione è una traduzione in C#. L'esempio C# usa un paio setter perché è quello che fa l'esempio VB.net scelto arbitrariamente. Il punto essenziale è che "con" equivale a definire una variabile temporanea e quindi usarla ogni volta che viene usato un punto senza identificatore precedente. – supercat

+0

Questo non è un equivalente, è un'alternativa. –

15

Non c'è un equivalente, ma penso che discutere di una sintassi potrebbe essere interessante!

Mi piace molto;

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

Altri suggerimenti?

Non riesco a immaginare che aggiungere questa funzione linguistica sarebbe difficile, in sostanza solo un pre-elaborato.

EDIT:

Ero stanco di aspettare per questa funzione, ecco e l'estensione che consente di ottenere un comportamento simile.

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

Utilizzo;

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

EDIT: È interessante notare che sembra che mi ha battuto qualcuno al punzone, ancora una volta, con questa "soluzione". Oh bene ..

+0

Anche se non esattamente la stessa cosa, mi piace la tua idea. Se utilizzato con una buona formattazione, può rendere il codice più leggibile. – Rudi

+0

Quindi, hai finito ripetendo il nome della variabile. Puoi fare lo stesso con: 'x = LongInstanceOfPersonVariableName; x.AgeIntVar = 21; // ecc. – LoBo

+1

Ho appena vomitato un po 'in bocca. – JJS