C# 是否有任何等效于 VB6
With
End With
没有什么完全等价的,但 C# 3 获得了在构造时设置属性的能力:
var person = new Person { Name = "Jon", Age = 34 };
和收藏:
var people = new List<Person>
{
new Person { Name = "Jon" },
new Person { Name = "Holly"}
};
它绝对不能替代 的所有用途With
,但值得了解其中一些用途。
C# 没有任何等效的语法。最接近的是对象初始值设定项,但它们并不相同:
var obj = new SomeThing {
Height = 100,
Text = "Hello, World",
ForeColor = System.Drawing.Color.Green
}
不。
接近的是对象和列表初始值设定项。
Person p = new Person()
{
FirstName = "John",
LastName = "Doe",
Address = new Address()
{
Street = "1234 St.",
City = "Seattle"
}
};
它绝不是等效的,但是,如果它是您要减少的打字,您可以做到。
{
var o = myReallyReallyReallyReallyLongObjectName;
o.Property1 = 1;
o.Property2 = 2;
o.Property3 = 3;
}
没有与 Visual Basic 的With
关键字等效的 C#。
c# 中没有等价物-> 在评论中阅读更多信息http://blogs.msdn.com/b/csharpfaq/archive/2004/03/11/why-doesn-tc-have-vb-net-s- with-operator.aspx
一个近似等效的方法是调用一个类成员的方法。您不必在类成员中重复命名拥有对象 - 这隐含在函数是成员的事实中,为给定实例调用。
由于这个原因,我怀疑在 C# 中直接等效于 With/End With 是一个好主意。如果您发现自己在给定范围内一遍又一遍地键入对象的名称,这很好地表明所讨论的代码将在该对象的类上创建一个很好的方法。
没有直接的等价物。正如其他人解释的那样,您可以在构造时设置属性,或者您可以将表达式分配给具有短名称的变量。以下内容在语义上应该是等价的:
With <expression>
.something ...
.somethingElse ...
End With
var w = <expression>;
w.something ...
w.somethingElse ...