C# int初始化值的区别是什么?

C# int初始化值的区别是什么?,c#,C#,我对这件事有些困惑 这些术语之间有什么区别?我应该什么时候用什么 int x = default(int); int x = 0; int x = new int(); 我在中读到这里 它们都是一样的,据我所知,它们都会产生相同的IL: ldc.i4.0 default是泛型的一个方便的关键字。即使不知道变量的类型,也可以将其初始化为默认值。然后,引用类型为null,int为0,其他结构的相应默认值为0 构造函数,new int()存在是因为int与其他类型一样只是一个(值)类型,所以它有

我对这件事有些困惑

这些术语之间有什么区别?我应该什么时候用什么

int x = default(int);
int x = 0;
int x = new int(); 

我在中读到这里

它们都是一样的,据我所知,它们都会产生相同的IL:

ldc.i4.0
default
是泛型的一个方便的关键字。即使不知道变量的类型,也可以将其初始化为默认值。然后,引用类型为null,int为0,其他结构的相应默认值为0

构造函数,
new int()
存在是因为
int
与其他类型一样只是一个(值)类型,所以它有一个构造函数,您可以调用它

从语义上讲,
newint()
0
是相同的,
default
有点不同,但是对于整数,它会产生相同的代码

代码示例(我认为唯一值得一举的例子是default关键字):

假设您有一个方法的简单实现(代码取自并稍作修改-如果您对LINQ感兴趣,这是一个很棒的存储库!)。此方法要么生成源集合的项,要么只生成一个项,即指定泛型类型的默认值:

public static IEnumerable<TSource> DefaultIfEmpty<TSource>(
        IEnumerable<TSource> source)
{
    bool foundAny = false;
    foreach (TSource item in source)
    {
        yield return item;
        foundAny = true;
    }
    if (!foundAny)
    {
        yield return // What to return here?
    }
}
您将得到一个集合,其中包含一个项,一个零。该方法使用
int
作为
TSource
进行编译,因此它调用
default(int)
,结果为0。如果对空字符串集合调用相同的方法,则该方法也将针对字符串进行编译,并将使用
default(string)
,这将导致null(因为这是所有引用类型的默认值)


至于另外两个(
newint()
0
),我已经提到它们的意思是相同的,所以只需使用较短的一个,零。它更易于阅读和维护,每个人都知道零是什么,因此构造函数可能只是让人困惑。

它们都是相同的,只是框架提供了不同的方式来声明变量。您可以选择任何您认为易于使用的选项。

始终使用

int x = 0;
甚至只是

int x;

它比其他版本更易于维护,可读性更好。同样,您的同行程序员提出的问题也可能会减少。

如链接中所述,它们是相同的。选择你喜欢的。你真的要在你的代码中使用
default(int)
new int()
吗?你基本上不应该使用1或3,只有在声明可能有明确赋值问题的局部变量时才使用2
default()
确实应该保留用于泛型。请不要选择任何一个。只需使用int x<代码>新整数(0)无法编译。哦,你说得对。出于某种原因,我认为有一个构造函数重载接受一个值。。。从答案中删除,谢谢你指出这一点。为了更清楚,你能展示代码示例吗?谢谢你宝贵的时间。再次感谢
int x;