2009-06-30 8 views
16

C#にはusingというキーワードがありますが、usingはオブジェクトを自動的に破棄します。C#で "With ... With With"と同義ですか?

With...End Withの等価はVisual Basic 6.0にありますか?

+2

"with"はVBの前に実際に存在していた。レコード型を扱うために、Pascalに存在します。パスカルが他の場所からアイデアを借りたかどうかは分かりません。 – JeffK

答えて

28

C#には同等の言語構成がありません。

+3

これは本当です。しかし、あなたが 'this'を返すメソッドを持つクラスを持っているなら、メソッドを連鎖させることができます。 – Dlongnecker

5

With ... With With with C#と同等のものはありません。

Visual BasicとC#の違いを示すa comparison chartがあります。

+0

その比較表は最高です。私はVBからC#への移行に取り組んでおり、それは非常に役立つだろう。 –

2

C#には同等の構造はありません。これは、Visual Basic 6.0/VB.NETの機能です。

31

これは同等ではありませんが、この構文は機能しますか?

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

"With"はインスタンスを作成しないので、これは間違っています。 –

6

私は、次のVBのと同等だと思う:、

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

唯一の本当の違いは、VBである:

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

が、これはC#あるだろう識別子には名前「q」はありませんが、単純にピリオドに遭遇したときに使用されるデフォルトの識別子ですそれ以前の他の識別子。

+1

外側の括弧は何ですか?申し訳ありませんが、これと同等の方法ではありません。それはセッターへの呼び出しのちょうど束。 – tomfanning

+2

外側のカッコは、変数qのスコープを設定します。オブジェクト式が構造体ではなくクラスであれば、上記のVB.NetとC#のコードはほぼ正確に同等です。前者のステートメントは、withステートメントの使用方法の例であり、後者のステートメントはC#変換です。 C#の例では、いくつかのsetterを使用しています。これは、任意に選択されたVB.netの例がそうであるためです。必須の点は、 "with"は一時変数を定義してから、ピリオドが先行する識別子なしで使用されるときはいつでも使用することです。 – supercat

+0

これは同等ではなく、代替手段です。 –

15

相当するものはありませんが、シンタックスについて議論するのは面白いかもしれないと思います!

私は非常に好きです。

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

他の提案はありますか?

この言語機能を追加することは難しく、本質的には前処理されているとは想像もしません。

EDIT:

私は、この機能を待っているの病気だったので、ここで、同様の動作を実現する拡張機能。

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

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

EDIT:興味深いことに、誰かがこの "ソリューション" と、再び、パンチに私を打つようです。ああ。..

+0

まったく同じではありませんが、私はあなたの考えが好きです。良いフォーマットで使用すると、コードを読みやすくすることができます。 – Rudi

+0

これで、変数名をやり直すことになりました。 'x = LongInstanceOfPersonVariableName;と同じようにすることができます。 x.AgeIntVar = 21; //等。 – LoBo

+1

私はちょうど私の口に少しを投げた。 – JJS