c# - 在 .NET 中初始化空变量

标签 c# .net variables initialization

在 .NET 中初始化空变量的正确方法是什么?我的一位同事告诉我,将变量硬定义为 null 会降低速度。

int var1;          // good practice
string s1;         // good practice

int var2 = 0;      // bad practice
string s2 = null;  // bad practice

对吗?

最佳答案

假设您实际上是指默认 值而不是null 值,如果您实际分配,它可能会非常、非常轻微地减慢速度构造函数中的值而不是变量声明中的值。如果它是变量声明的一部分,我可能期望 JIT 编译器删除不必要的赋值,因为对象的内存在第一次初始化时被删除。

但是,无论哪种情况,这种情况发生的可能性都非常小。

您认为哪种形式更具可读性?在绝大多数情况下,这要重要得多。

编辑:请注意,至少对于静态字段,在某些微妙的情况下两者的行为方式不同。这是一个示例 - Test1 和 Test2 类y 声明是否具有赋值方面有所不同:

using System;

class Test1
{
    static int x = GetX();
    static int y = 0;

    public static void Hello()
    {
        Console.WriteLine("{0} {1}", x, y);
    }

    static int GetX()
    {
        y = 2;
        return 5;
    }
}

class Test2
{
    static int x = GetX();
    static int y;

    public static void Hello()
    {
        Console.WriteLine("{0} {1}", x, y);
    }

    static int GetX()
    {
        y = 2;
        return 5;
    }
}

class Test
{
    static void Main()
    {
        Test1.Hello();
        Test2.Hello(); 
    }
}

关于c# - 在 .NET 中初始化空变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3592274/

相关文章:

c# - Log4net 发布时不写入

c# - 如何使用 Utf8JsonWriter 编写字符串数组?

c# - 无法访问已处置的对象。对象名称 : System.Net.Sockets.NetworkStream

.net - 完整的 .Net 中的 Entity Framework 核心?

javascript - 不同 '<script>' 标签中的相同变量不会发生冲突吗?

jquery - 将事件处理程序绑定(bind)到 jQuery 中的多个元素变量?

c# - 这个 AesManaged 的​​包装器可以吗?

c# - 如何保存文本框中的第一个文本而不覆盖它 C# .NET

c# - 共享库 App.Config

variables - 重新评估 makefile 变量