28

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

With...End WithVisual Basic 6.0中是否有等价物?

4

6 回答 6

38

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

Animal a = new Animal()
{
    SpeciesName = "Lion",
    IsHairy = true,
    NumberOfLegs = 4
};
于 2009-06-30T12:46:04.320 回答
35

C# 没有与之等效的语言结构。

于 2009-06-30T12:40:15.050 回答
22

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

我相当喜欢;

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

编辑:有趣的是,似乎有人用这个“解决方案”再次击败了我。那好吧..

于 2011-05-11T13:13:40.003 回答
9

我认为相当于以下VB

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

这是C#

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

唯一真正的区别是,在 vb 中,标识符没有名称“q”,而只是在遇到句点时使用的默认标识符,而句点之前没有任何其他标识符。

于 2010-10-29T15:22:28.867 回答
7

在C#中没有与 With ... End With 等价的东西。

这是一个比较图表,说明了 Visual Basic 和 C# 之间的差异。

于 2009-06-30T12:41:09.993 回答
3

C# 中没有等效的结构。这是 Visual Basic 6.0 / VB.NET的一项功能。

于 2009-06-30T12:41:13.020 回答