C#中的任何Visual Basic“With”模拟?

时间:2010-11-18 20:33:24

标签: c# .net vb.net c#-4.0 vb.net-to-c#

  

可能重复:
  C# equivalent for Visual Basic keyword: 'With' ... 'End With'?

VB.NET

With Alpha.Beta.Gama.Eta.Zeta
    a = .ZetaPropertyA
    b = .ZetaPropertyB
    c = .ZetaPropertyC
End With

C#?

a = Alpha.Beta.Gama.Eta.Zeta.ZetaPropertyA
b = Alpha.Beta.Gama.Eta.Zeta.ZetaPropertyB  
c = Alpha.Beta.Gama.Eta.Zeta.ZetaPropertyC

5 个答案:

答案 0 :(得分:12)

不,不存在。

虽然你可以稍微缩短一点:

var z = Alpha.Beta.Gama.Eta.Zeta;

z.ZetaPropertyA = a;
z.ZetaPropertyB = b; 
z.ZetaPropertyC = c;

对于你的其他情况:

var z = Alpha.Beta.Gama.Eta.Zeta;

a = z.ZetaPropertyA;
b = z.ZetaPropertyB;
c = z.ZetaPropertyC;

这应该是显而易见的;)

答案 1 :(得分:3)

对于新实例,您可以使用对象初始值设定项:

Alpa.Beta.Gama.Eta = new Zeta
{
    ZetaPropertyA = a, 
    ZetaPropertyB = b,
    ZetaPropertyC = c
}

答案 2 :(得分:2)

不,没有什么比C#中的with构造更好。

答案 3 :(得分:1)

Nope。解决方法是(短)本地变量名称而不是with。每行添加几个字符,但最终仍然使用完全限定的引用。

答案 4 :(得分:1)

抱歉,C#没有。对象初始化程序@Jakub建议可能提供替代方法,或者:

如果您自己设计Zeta,则可以使用 fluent interface 设计模式。这将允许你这样做:

Alpha.Beta.Gama.Eta.Zeta
    .SetPropertyA(A)
    .SetPropertyB(B)
    .SetPropertyC(C);

这接近你想要的东西,而牺牲了其他地方的大量工作。请记住,流畅的界面并不总是最佳的设计选择。