2009-07-24 24 views
20

可能性の重複:
Equivalence of “With…End With” in c#?VBのWithステートメントに相当するC#とは何ですか?

VB、私は本当に好き... With声明の一つの特徴がありました。 C#にはそれに相当するものがありますか? usingを使用して名前空間を入力する必要がないことはわかっていますが、それだけで制限されています。 VBであなたがこれを行うことができます:

With Stuff.Elements.Foo 
    .Name = "Bob Dylan" 
    .Age = 68 
    .Location = "On Tour" 
    .IsCool = True 
End With 

C#で同じコードは次のようになります。

Stuff.Elements.Foo.Name = "Bob Dylan"; 
Stuff.Elements.Foo.Age = 68; 
Stuff.Elements.Foo.Location = "On Tour"; 
Stuff.Elements.Foo.IsCool = true; 
+0

dupe http://stackoverflow.com/questions/1063429/equivalence-of-with-end-with-in-c – Jimmy

答えて

36

本当に、あなたは変数を割り当てる必要はありませ。だから、

var bar = Stuff.Elements.Foo; 
    bar.Name = "Bob Dylan"; 
    bar.Age = 68; 
    bar.Location = "On Tour"; 
    bar.IsCool = True; 

またはC#3.0で:

var bar = Stuff.Elements.Foo 
    { 
     Name = "Bob Dylan", 
     Age = 68, 
     Location = "On Tour", 
     IsCool = True 
    }; 
+9

あなたはタイプとして 'Stuff.Elements.Foo'を扱っています。それがVBコードでどのように使われているのでしょうか、それとも実際にネストされた変数への参照ですか?このテクニックは完全に有効ですが、あなたのコードは正しくはないと思います。 – quark

+3

私は[ブログ](http://blog.baltrinic.com/software-development/dotnet/c-equivalent-for-visual-basic-with-statement)を書きましたが、C#でwith文をシミュレートする方法については、拡張メソッドとラムダ式を使用します。 –

+1

@Kenneth:Object.Child.Grandchild.GreatGrandchild.Property1 = 1;がDemeterの法則に違反していると主張することはできますが、それはかなり巧妙です。 –

4

C#3.0の最も近いものは、あなたがプロパティを初期化するコンストラクタを使用することができるということです。

Stuff.Elements.Foo foo = new Stuff.Elements.Foo() {Name = "Bob Dylan", Age = 68, Location = "On Tour", IsCool = true} 
+2

'Stuff.Elements.Foo'をタイプとして扱っています。それがVBコードでどのように使われているのでしょうか、それとも実際にネストされた変数への参照ですか?このテクニックは完全に有効ですが、あなたのコードは正しくはないと思います。 (私はquarkのコメントをこの答えにもあてはまるものとしてコピーしました) – MarkJ

7

別にオブジェクト初期化子から(コンストラクタコールでのみ使用可能)、取得できる最高のものは次のとおりです。

var it = Stuff.Elements.Foo; 
it.Name = "Bob Dylan"; 
it.Age = 68; 
... 
関連する問題