2010-11-29 119 views
7

C#有任何等价物VB6C#中的等效语法是什么?

With 
End With 
+1

这是你应该读http://stackoverflow.com/questions/283749/the-vb-net-with-statement-embrace-or-avoid问题 – 2010-11-29 15:34:12

+1

你能来最接近的是真的*简短*变量名称。 ;)对于对象初始化,请参阅Jon Skeet的答案。 – 2010-11-29 15:35:03

回答

19

没有什么相当相当,但C#3获得了建筑设置属性的能力:

var person = new Person { Name = "Jon", Age = 34 }; 

和集合:

var people = new List<Person> 
{ 
    new Person { Name = "Jon" }, 
    new Person { Name = "Holly"} 
}; 

这绝对不是的全部的使用With,但值得了解其中的一些。

14

C#没有任何等价语法。最接近的是对象初始化,但他们是不一样的:

var obj = new SomeThing { 
    Height = 100, 
    Text = "Hello, World", 
    ForeColor = System.Drawing.Color.Green 
} 
1

一个近似等效的方法是调用一个类的成员方法。您不必在类成员内重复命名拥有的对象 - 这是隐含的,因为该函数是一个成员,被称为给定的实例。

我怀疑直接相当于With/End With是C#中的一个好主意,因为这个原因。如果你发现自己在一个给定的范围内反复输入一个对象的名字,这是一个很好的迹象表明,有问题的代码会在该对象的类上制作一个好的方法。

2

没有C#等价于Visual Basic的With关键字。

6

什么接近的对象和列表初始化

Person p = new Person() 
{ 
    FirstName = "John", 
    LastName = "Doe", 
    Address = new Address() 
    { 
     Street = "1234 St.", 
     City = "Seattle" 
    } 
}; 
1

在这里阅读更多没有直接等同。正如其他人所解释的那样,您可以在构造上设置属性,也可以将表达式分配给一个带有简短名称的变量。以下内容应该在语义上相同:

With <expression> 
    .something ... 
    .somethingElse ... 
End With 

var w = <expression>; 
w.something ... 
w.somethingElse ... 
4

但是,它绝不是等同的,但是,如果它是您尝试减少的打字,则可以。

{ 
    var o = myReallyReallyReallyReallyLongObjectName; 
    o.Property1 = 1; 
    o.Property2 = 2; 
    o.Property3 = 3; 
} 
相关问题