2009-06-30 133 views
16

我知道C#有using关键字,但是using会自动处理对象。C#中“With ... End With”的等价性?

Visual Basic 6.0中是否有与With...End With等效?

+2

“with”实际上在VB之前就已经存在了。它存在于Pascal中,用于处理记录类型。不知道帕斯卡是否从别处借鉴了这个想法。 – JeffK 2010-10-29 15:32:57

回答

28

C#没有相应的语言结构。

+3

这是真的。但是如果你有一个返回'this'的方法的类,那么你可以将这些方法链接在一起。 – Dlongnecker 2010-10-29 15:26:08

5

没有等同于With ... End With在C#

这里的a comparison chart为你说明了Visual Basic和C#之间的区别。

+0

该比较图表很棒。我正在从VB过渡到C#,这将是非常有用的。 – 2011-05-11 13:36:05

2

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

31

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

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

“With”不会创建实例,所以这是错误的。 – 2017-04-28 21:02:58

6

我认为下面VB相当于:

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

将是这是C#

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

唯一的区别是,在VB中,标识符没有名称“q”,但仅仅是一个缺省标识符,当遇到一个句点时没有使用y之前的其他标识符。

+1

外卷有什么?对不起,但这并没有任何接近的效果。它只是一堆给制定者的电话。 – tomfanning 2010-11-11 22:03:32

+2

外括号设置变量q的范围。假设对象表达式是一个类而不是一个结构体,我认为上面的VB.Net和C#代码几乎完全相同。前面的语句是如何使用with语句的一个例子,后面的语句是C#翻译。 C#示例使用了几个setter,因为这是任意选择的VB.net示例。重要的一点是,“with”等同于定义一个临时变量,然后在任何时候使用一个没有前面标识符的句点来使用它。 – supercat 2010-11-13 17:55:35

15

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

我很喜欢;

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

编辑:有趣的是,似乎有人打我一记重拳,再次,这个“解决方案”。呵呵..