[英]c# in VS2005: what do the following types default to in C#?
對於VS2005中的C#,如果簡單地聲明並且沒有賦值給任何值,那么以下類型的變量值是多少? 即。 它們的默認值是多少?
int
bool
string
char
enum
這是您提到的每種類型的默認值。
int = 0
bool = false
string = null
char = '\0'
enum = 0 //behind the scenes enum is int
如果您希望捕獲任何類型的默認值,那么在運行時可以使用C#中的default
語句,只需將其調用如下。
//This will print 0 on screen.
Console.WriteLine(default(int));
通常,這在泛型中用於標識泛型類型參數的默認值,其中類型僅在運行時已知。
如果他們在本地使用(即他們不是一類或結構的成員),他們將不會有默認值。 在為它們分配值之前,您將無法使用它們(除非您明確地“新建它們”)。
如果它們不在本地使用,它們將默認為0
, false
, null
和'\\0'
。
編輯:您已將enum
添加到列表中。 enums
默認值為0,因為默認情況下它們在后台使用int
。 因此,枚舉被聲明為enum
0(通常是第一個枚舉,但是可以覆蓋)將是默認值。 如果你沒有出於任何原因0值枚舉,那么你就必須為你的無效值enum
為默認值。
請解釋。 我在談論聲明類或方法范圍內的變量。 - 克雷格約翰斯頓
我說了一個小小的謊言來指出編譯器是如何工作的。 如果聲明一個局部變量,如果您嘗試使用它而沒有首先明確地為該變量賦值,編譯器將無法編譯; 包含引用類型的null
。
例如:
public void Foo()
{
int bar;
int barPlus5 = bar + 5; // Compiler Error!
}
從技術上講 , bar
仍然具有默認值0,但由於C#編譯器不允許您在本地范圍的變量中使用該默認值,因此本地范圍的變量實際上沒有默認值。 <Ben Kenobi>
從某個角度來看,我告訴你的是真的。 </Ben Kenobi>
。
規則有例外:out參數得到一個pass,因為編譯器強制out參數必須在返回之前由方法賦值,你可以執行int bar = new int();
獲取默認值,因為這在技術上是一個任務。
現在,如果將變量聲明為類或結構的成員,如下所示:
public class Foo
{
public int Bar {get;set;}
public Foo() { }
}
然后你在某處實例化Foo,Bar的默認值為0。
例如:
var foo = new Foo();
Console.WriteLine(foo.Bar); // output: 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.