上次寫過一些平常開發中總結的小技巧,這次繼續補充一部分。
1. 多個Using簡化書寫。
我們經常會遇到需要使用多個using對象的時候,這時候我們可能這樣寫代碼:
using (Class1 c1 = new Class1(someParam1))
{
using (Class2 c2 = new Class2(someParam2))
{
//TODO:在這裏添加功能代碼
}
}
實際上,我們可以簡化書寫:
using (Class1 c1 = new Class1(someParam1),Class2 c2 = new Class2(someParam2))
{
//TODO:在這裏添加功能代碼
}
2. 很多時候,我們在判斷某字符串是否是某幾個指定字符串之一,可能會寫出下面的代碼:
bool NameExists(string name) {
return name == “張三” || name == “李四” || name == “王五” ||name == “趙六”;
}
但3.0以後這裏其實有更加簡單的寫法:
bool NameExists(string name){
return new[] { “張三”, “李四”, “王五”, “趙六” }.Contains(name);
}
或者如果這種判斷很頻繁的話,我們還可以使用擴展方法:
public static bool In(this string name, params string[] names)
{
foreach (string specialName in names)
{
if (name != specialName) return false;
}
return true;
}
var name="test";
Console.Write(name.In("張三",“李四”, “王五”, “趙六”);
3. 在比較字符串時,我們有時會忽略大小寫比較,你可能會這樣寫代碼:str1.ToUpper() == str2.ToUpper(), 不過實際上string對象已經提供了很多更好的方法,如: str1.Equals ( str2, StringComparison.OrdinalIgnoreCase)
4. ??用於在對象爲空時指定默認值,我們可以使用這個特性做多個默認值的綁定
string result = var1 ?? var2 ?? var3 ?? String.Empty;
5. 這種用法並不推薦,不過你確實可以使用中文等非英語語言對類或者方法進行命名,如:
public string 方法1(){
return “XXXXXXX”;
}
不僅如此,你甚至還可以使用轉義符來命名:
public string 測試\u9999哈(){
return "aaa";
}
實際調用的方法名爲:測試香哈();
6. 在C#中我們同樣可以創建類似JS的匿名行內函數,如:
var var1 = new Func<String>(() =>{
return “測試測試”;
})();
希望這些總結對讀者同樣會有所幫助。