p35 @字符串
在字符串之前加上一個@
,可以保持原生字符,不用再進行轉義(除了雙引號)。
例如:
@"A short list:
item 1
item 2"
或者:
@"C:\Temp\MyDir\MyFile.doc"
這相當于"C:\\Temp\\MyDir\\MyFile.doc"
。
p41 using static
可以使用using static System.Console
來將靜態成員直接包含到作用域中。
這樣訪問WriteLine()
方法就不用再加上靜態類名了。
p71 typeof 運算符
typeof
運算符可以得到操作數的類型。
例如:
string myString = "north";
orientation myDirection = (orientation)Enum.Parse(typeof(orientation), myString);
p80 數組問號
int?[] myIntArray = new int?[7] {5, intValue, 9, 10, null, 2, 99};
注意緊跟在int
聲明之后的問號?
。問號旨在讓編譯器直到這個int[]
數組可以包含空對象,若沒有這個問號,就會顯示編譯異常。
其次,要注意在初始化一個整數時,通常將其默認設置為0。
p80多維數組
二維數組格式:
int[,] intArray;
多維數組格式:
int[,,,] intArray;
初始化:
double[,] hillHeight = new double[3,4];
也可以用字面值進行初始賦值:
double[,] hillHeight = {{1,2,3,4}, {2,3,4,5}, {3,4,5,6}};
訪問:
double[,] hillHeight = {{1,2,3,4}, {2,3,4,5}, {3,4,5,6}};
foreach (double height in hillHeight){Console.WriteLine($"{height}");
}
hillHeight[0,0]
hillHeight[0,1]
hillHeight[0,2]
...
hillHeight[1,2]
這種數組叫做矩形數組,因為每一行的元素個數都相同。
還有一種鋸齒數組(jagged array),詳情見p82。
p98 ref和out
ref關鍵字可用于返回類型和入參類型。
使用例子:
- 首選在函數形參處指定ref
static void ShowDouble(ref int val) {val*=2;Conosole.WriteLine($"val doubled = {val}"); }
- 在函數調用時需要再次指定(這是必需的)
int myNumber = 5; Console.WriteLine($"myNumber = {myNumber}"); ShowDouble(ref myNumber); Console.WriteLine($"myNumber = {myNumber}");
ref必須在外部初始化,C#不允許假定ref參數在使用它的函數中初始化。
也就是說下面的用法是非法的:
int muNumber;
ShowDouble(ref myNumber);
Console.WriteLine($"myNumber = {myNumber}");
除了ref外,還要out關鍵字。
使用out關鍵字時,必須把它看成尚未賦值。
調用函數時會丟棄out中存儲的值。
例子:
static int MaxValue(int[] intArray, out int maxIndex)
{int maxVal = intArray[0];maxIndex = 0;for(int i=1, i<intArray.Length; ++i){if(intArray[i] > maxVal){maxVal = intArray[i];maxIndex = i;}}return maxVal;
}
使用該函數:
int[] myArray = {1,2,2,,1,332,22,12211};
Console.WriteLine("maximum value" + $"{MaxValue(myArray, out int maxIndex)}");
Console.WriteLine("The first occurrence of this value is " + $"at element {maxIndex + 1}");
p100 元組
示例:
var numbers = {1,2,3,4,5};
上面代碼創建了一個名為numbers的元組,其中包含成員Item1、Item2、Item3、Item4和Item5。
可以以下面的方式來訪問這些成員:
var number = numbers.Item1;
還可以給成員指定特定的名稱來明確標識:
(int one, int two, int three, int four, int five)nums = {1,2,3,4,5};
int first = nums.one;
p135 雙問號空值合并操作符
friend ?? throw new ArgumentNullException(paraName: nameof(friend), message: "null")
上面的帶使用了雙問號(??
),稱為空值合并操作符(null-coalescing operator),檢查所賦的值是否為null,若為null,則拋出ArgumentNullException
函數;否則將該值賦給變量。
雙問號(??)是一個單元運算符,其左右兩邊數據類型必須是相同類型或能隱形轉換類型的。意思是,首先檢測左邊的值,若為Null,那么整個表達式取值為右側的值,否則為左側的值。
例如:
string s = null; Console.Write(s ?? "abc");
。將打印出"abc"。
例如:string s = "a"; Console.Write(s ?? "abc");
將打印出"a"。