我知道VB.Net,我正在努力搞清楚我的C#.在C#中是否有一个With块等价物?
谢谢
虽然C#与一般情况没有任何直接等价,但C#3获取构造函数调用的对象初始化语法:
var foo = new Foo { Property1 = value1, Property2 = value2, etc };
有关详细信息,请参阅深度C#的第8章 - 您可以从Manning的网站免费下载.
(免责声明 - 是的,将这本书交到更多人的手中符合我的利益.但是,嘿,这是一个免费章节,为您提供有关相关主题的更多信息......)
这就是Visual C#程序经理所说的: 为什么C#没有'with'语句?
很多人,包括C#语言设计师,都认为'with'常常会损害可读性,而且更多的是诅咒而不是祝福.声明具有有意义名称的局部变量并使用该变量对单个对象执行多个操作比使用具有某种隐式上下文的块更清楚.
正如上面链接的Visual C#程序管理器所说,在有些情况下,With语句更有效,这是他用作重复访问复杂表达式的简写时给出的示例.
使用扩展方法和泛型,您可以通过添加如下内容来创建与With语句模糊等效的内容:
public static T With(this T item, Action action) { action(item); return item; }
举一个如何使用它的简单例子,使用lambda语法然后你可以用它来改变这样的东西:
updateRoleFamily.RoleFamilyDescription = roleFamilyDescription; updateRoleFamily.RoleFamilyCode = roleFamilyCode;
对此:
updateRoleFamily.With(rf => { rf.RoleFamilyDescription = roleFamilyDescription; rf.RoleFamilyCode = roleFamilyCode; });
在这样的示例中,唯一的优势可能是更好的布局,但是使用更复杂的引用和更多属性,它可以为您提供更易读的代码.
不,那里没有.
在" 使用对象 "部分的页面下方大约3/4 :
VB:
With hero .Name = "SpamMan" .PowerLevel = 3 End With
C#:
//No "With" construct hero.Name = "SpamMan"; hero.PowerLevel = 3;