代码之家  ›  专栏  ›  技术社区  ›  serhio

任何C语言中的“带”模拟“的”Visual Basic?[副本]

  •  4
  • serhio  · 技术社区  · 14 年前

    可能重复:
    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 回复  |  直到 12 年前
        1
  •  12
  •   Femaref    14 年前

    不,不存在。

    虽然你可以把它缩短一点:

    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;
    

    不过,这应该是显而易见的;)

        2
  •  3
  •   Jakub Konecki    14 年前

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

    Alpa.Beta.Gama.Eta = new Zeta
    {
        ZetaPropertyA = a, 
        ZetaPropertyB = b,
        ZetaPropertyC = c
    }
    
        3
  •  2
  •   Jonas Elfström    14 年前

    不,没有什么比 with 用C建造。

        4
  •  1
  •   Donnie    14 年前

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

        5
  •  1
  •   Joseph Tanenbaum    14 年前

    对不起,C没有。对象初始值设定项@jakub建议可以提供替代项,或者:

    如果你设计 Zeta 你自己,你可以用 fluent interface 设计模式。你可以这样做:

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

    它接近你想要的,以牺牲其他地方的大量工作为代价。记住,流畅的界面并不总是最佳的设计选择。

    推荐文章