我知道C#有using
关键字,但using
会自动清理对象。
Visual Basic 6.0中是否有相当于With...End With
的等价物?
我知道C#有using
关键字,但using
会自动清理对象。
Visual Basic 6.0中是否有相当于With...End With
的等价物?
这不是完全等价的,但这种语法对你是否可行呢?
Animal a = new Animal()
{
SpeciesName = "Lion",
IsHairy = true,
NumberOfLegs = 4
};
C#没有相应的语言结构来实现这个。
虽然没有相应的对应词汇,但我认为讨论语法可能会很有趣!
我非常喜欢;
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..
});
编辑:有趣的是,似乎有人比我更早地提出了这个“解决方案”。好吧..
x = LongInstanceOfPersonVariableName; x.AgeIntVar = 21; //等等。
- LoBo我认为以下VB代码的等效代码是:
With SomeObjectExpression()
.SomeProperty = 5
.SomeOtherProperty = "Hello"
End With
这应该是关于 C# 的问题:
{
Var q=SomeOtherExpression();
q.SomeProperty = 5;
q.SomeOtherProperty = "Hello";
}
唯一的真正区别是,在VB中,标识符没有名称“q”,而是在遇到句点之前没有任何其他标识符时,简单地用作默认标识符。SomeOtherExpression
或属性设置器做什么,我认为它们都没有办法确定上述代码片段中哪一个在评估它们,除非使用反射来检查调用上下文。事实上,反射可以区分调用上下文,这使它们不完全等效,但在所有其他方面,行为将是相同的。 - supercat