关于vb.net:C#中“With … End With”的等价性?

Equivalence of “With…End With” in C#?

本问题已经有最佳答案,请猛点这里访问。

我知道c有using关键字,但using会自动处理对象。

Visual Basic 6.0中是否存在与With...End With等效的内容?


它不是等价的,但是这种语法对您有用吗?

1
2
3
4
5
6
Animal a = new Animal()
{
    SpeciesName ="Lion",
    IsHairy = true,
    NumberOfLegs = 4
};


C没有相应的语言结构。


没有等价物,但我认为讨论语法可能很有趣!

我很喜欢;

1
2
3
4
5
NameSpace.MyObject.
{
    active = true;
    bgcol = Color.Red;
}

还有什么建议吗?

我无法想象添加这个语言特性会很困难,基本上只是一个预处理的。

编辑:

我厌倦了等待这个特性,所以这里是实现类似行为的扩展。

1
2
3
4
5
6
7
/// <summary>
/// C# implementation of Visual Basics With statement
/// </summary>
public static void With<T>(this T _object, Action<T> _action)
{
    _action(_object);
}

使用情况;

1
2
3
4
5
6
LongInstanceOfPersonVariableName.With(x => {
     x.AgeIntVar = 21;
     x.NameStrVar ="John";
     x.NameStrVar +=" Smith";
     //etc..
});

编辑:有趣的是,似乎有人用这个"解决方案"打败了我。哦,好吧。


我认为相当于下面的vb:

1
2
3
4
With SomeObjectExpression()
  .SomeProperty = 5
  .SomeOtherProperty ="Hello"
End With

这是C:

1
2
3
4
5
{
  Var q=SomeOtherExpression();
  q.SomeProperty = 5;
  q.SomeOtherProperty ="Hello";
}

唯一的区别是,在VB中,标识符没有名称"q",只是在遇到一个句点时使用的默认标识符,在此之前没有任何其他标识符。


没有等价于…以C结尾。

下面是一个对比图,说明了VisualBasic和C_之间的区别。


C中没有等效结构。这是一个VisualBasic6.0/vb.net功能。