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

C#编程风格问题-实数赋值之前的Null赋值[关闭]

  •  5
  • terjetyl  · 技术社区  · 15 年前

    XmlDocument doc = null;
    doc = xmlDocuments[3];
    

    XmlDocument doc = xmlDocuments[3];
    

    我已经看过很多次了,但对我来说,它似乎过于冗长

    11 回复  |  直到 14 年前
        1
  •  30
  •   Jon Skeet    15 年前

    String name;
    using (TextReader reader = ...)
    {
        // I can't declare name here, because otherwise it isn't
        // accessible afterwards
        name = reader.ReadToEnd();
    }
    

    在可能的情况下,在首次使用时声明的原因:

    • 它使变量的类型接近其用途-无需在方法中向上滚动找到它。
    • 它使范围尽可能窄,这使得变量的使用更加明显。
        2
  •  18
  •   Mitch Wheat    15 年前

    XmlDocument doc = xmlDocuments[3];
    

        3
  •  3
  •   Guffa    15 年前

    XmlDocument doc;
    doc = xmlDocuments[3];
    

    或者您可以在同一语句中同时执行这两项操作:

    XmlDocument doc = xmlDocuments[3];
    

    但是,此表格:

    XmlDocument doc = null;
    doc = xmlDocuments[3];
    

        4
  •  2
  •   Troy Hunt    15 年前

        5
  •  1
  •   Rune Grimstad    15 年前

    正如其他人所指出的,如果需要在循环范围之外声明变量,则第一种样式可能很有用。但在大多数情况下,我认为这种样式是旧的VisualBasic6(及更早版本)遗留下来的,在旧的VisualBasic6(及更早版本)中,在中使用之前必须声明一个变量。

    旧VB不支持您的第二种样式,因此第一种样式仍然很流行。。。

        6
  •  0
  •   Razzie    15 年前

    刚好在…之后 然后就宣布不,我看不出你有什么理由想这么做。无论如何,这肯定不是我的风格。

        7
  •  0
  •   Antony Carthy    15 年前

    我喜欢将变量视为“共享”或“未共享”,因为有些变量需要在类或方法中的多个位置使用,而有些变量只需要使用一次。

    这完全取决于你需要在哪里使用它们。

    Xyz xyz = new Xyz; // Declared at the top.
    // Loads of unrelated code in-between...
    xyz.abc();
    // More unrelated code in-between...
    xyz.def(stuff);
    

    案例2:

    // Loads of unrelated code above...
    Xyz xyz = new Xyz; // Declared in a 'block'.
    xyz.abc();
    xyz.def(stuff);
    xyz.destroy();
    // More unrelated code below...
    
        8
  •  0
  •   isntn    15 年前

    我基本上同意乔恩的观点(更不用说我通常不得不同意他:-)。

    您可以选择:

    //Do something...
    XmlDocument doc = xmlDocuments[3];
    //use doc
    //Do something...
    

    2.

    //Do something...
    XmlDocument doc = null;
    doc = xmlDocuments[3];
    //Use doc
    //Do something...
    

    3.

    //Do something...
    XmlDocument doc = null;
    //...Do something with other variables etc...
    doc = xmlDocuments[3];
    //Do something...
    //Use doc
    

    4.

    //Do something...
    XmlDocument doc = null;
    //...Do something with other variables etc...
    doc = xmlDocuments[3];
    //Use doc
    //Do something...
    

    5.

    //Do something...
    XmlDocument doc = null;
    doc = xmlDocuments[3];
    //Do something...
    //Use doc
    

    6.

    //Do something...
    XmlDocument doc = xmlDocuments[3];
    //Do something...
    //use doc
    

    我希望你能看到选项1是有道理的。

    选项1是在一行中同时完成声明、定义和初始化的示例。您可以进一步压缩它:

    var doc = xmlDocuments[3];
    

    词汇(独立于语言):

    • 类型绑定:类型推断、使用超级类型等。
    • 定义:编码器使编译器保留空间。(在堆栈等上-注意外部名称不需要空格)
    • 初始化:编码器在定义过程中第一次赋值。 在大多数情况下,如果编码器忽略初始化,编译器会进行初始化(为null、0、false、默认值等)。
    • 用法:显而易见!
    • 范围:显而易见!
    • 可访问性,如适用:明显的

        9
  •  -1
  •   Prashant Cholachagudda    15 年前

    我更喜欢用这个:

    XmlDocument doc = null;
    //blah blah
    doc = xmlDocuments[3];
    

    我只想在需要时分配和使用“doc”。。

     XmlDocument doc = xmlDocuments[3];
    
        10
  •  -2
  •   stevehipwell    15 年前

    我会和你一起去

    void Foo()
    {
      XmlDocument doc;
    
      //Do other code here
    
      //Create doc
      doc = xmlDocuments[3];
    }
    

    因为在方法中,文档可能要到以后才能使用。在使用文档之前创建文档更有意义。更容易阅读(较少滚动)。

        11
  •  -3
  •   Johan Danforth    15 年前