web-dev-qa-db-ja.com

C#の "With ... End With"と同等か

C#にはusingキーワードがあることは知っていますが、usingはオブジェクトを自動的に破棄します。

Visual Basic 6.With...End Withと同等のものはありますか?

22
odiseh

C#には、これに相当する言語構成はありません。

34

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

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

同等のものはありませんが、構文を議論することは興味深いと思います!

私はかなり好きです。

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

他に何か提案はありますか?

この言語機能を追加するのが難しいとは思えません。基本的には前処理だけです。

編集:

私はこの機能を待つのにうんざりしていたので、これが同様の動作を実現する拡張機能です。

/// <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..
});

編集:興味深いことに、この「解決策」により、誰かが私を再び殴りつけたようです。しかたがない..

21
expelledboy

私は以下と同等だと思います[〜#〜] vb [〜#〜]

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

これはC#

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

唯一の実際の違いは、vbでは識別子に「q」という名前が付いておらず、ピリオドの前に他の識別子が存在しない場合に使用されるデフォルトの識別子にすぎません。

9
supercat

C# のWith ... End Withに相当するものはありません。

以下は、Visual BasicとC#の違いを示す 比較チャート です。

6
Joseph

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

3
JaredPar