APS.NET MVC + EF (00)---C#基礎
-
命名參數
命名參數是把參數附上參數名稱,這樣在調用方法的時候不必按照原來的參數順序填寫參數,只需要對應好參數的名稱也能完成方法調用。
static void Main(string[] args) { Console.WriteLine(ShowComputer("i3 370M","2G","320G")); Console.WriteLine(ShowComputer(disk: "320G", cpu: "i3 370M", ram: "2G")); Console.Read(); }
private static string ShowComputer(string cpu, string ram, string disk) { return "My computer ... \nCpu:" + cpu + "\nRam:" + ram + "\nDisk:" + disk + "\n"; } |
-
隱式類型
來看看下面的代碼:
var a=1; //int a=1;
var b="123"; //string b="123";
var myObj=new MyObj(); //MyObj myObj=new MyObj();
上面的每行代碼,與後面的註釋起到的作用完全一樣。也就是說,在聲明一個變量(並且同時給它賦值)的時候,完全不用指定變量的類型,只要一個var就可以解決問題,編譯器會根據變量的值,推導出變量的類型。
註意:必須在聲明的同時賦值。
-
匿名類型
創建一個對象,一定要先定義這個對象的類型嗎?不一定,看下面的代碼
var oddsAndEnds = new[]{
new {Name="MVC" , Category="Pattern"},
new {Name="Hat" , Category="Clothing"},
new {Name="Apple" , Category="Fruit"}
};
StringBuilder result = new StringBuilder();
foreach (var item in oddsAndEnds) {
result.Append(item.Name).Append(" ");
}
new關鍵字之後就直接為對象定義屬性,並為這些屬性賦值。而且,對象創建出來之後,在創建對象的方法中,還可以暢通無阻的訪問對象的屬性。
通過結合對象初始化器和類型推斷,可以創建簡單的數據存儲對象,而不需要定義相應的類或結構(匿名)。
-
dynameic類型
dynameic類型成為"動態類型"。我們平時定義一個int i=1是靜態類型,靜態類型就是我們在沒有編譯的時候已經明確的知道他是一個int類型,動態語言是我們在運行時才會知道的類型。在編寫動態類型的時候無法使用vs的智能提示。
class Person { public string Name { get; set; } } class Program { static void Main(string[] args) { dynamic c = new Person(); c.Name = "abc"; c.Age = 30; //編譯時不報錯,運行時報錯 Console.WriteLine(c.Name); } } |
Dynamic類型的實例和其他類型的實例間的轉換是很簡單的,直接賦值即可。例如:
dynamic d1 = 7; dynamic d2 = "a string"; dynamic d3 = System.DateTime.Today;
int i = d1; string str = d2; DateTime dt = d3; |
- 可空類型
在程序開發中,有時候需要值類型也為可空類型,比如,在數據庫中,我們可以把一個日期Datetime設置為null。
可空類型的定義語法為: System.Nullable<類型> 變量名
例如: System.Nullable<int> num;
"?"語法就是定義Nullable<T>的一個快捷語法,上面的示例可以寫作:
int? num;
把一個值類型變量定義為對應的Nullable類型後, 這個變量就有一些其他的屬性
now.HasValue 是一個bool值,表示該變量是否非空.
now.Value 就是對應的DateTime類型值. 註意不要在now.HasValue為false的時候使用這個屬性。例如:
int? num1=null;
int num2 = num1.HasValue ? Num1 : 0 ;
也可以使用"??"運算符分配默認值,例如:
int num2 = num1 ?? 0;
-
擴展方法
擴展方法使你能夠向現有類型"添加"方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用。
下面的示例為String添加判斷輸入的string是否郵箱格式的功能。
using System.Text.RegularExpressions; //正則表達式命名空間 namespace Extension_Method { //類必須為static的 public static class StringHelper { //擴展方法必須為靜態的 //擴展方法的第一個參數必須由this來修飾(第一個參數是被擴展的對象) public static bool isEmail(this string _string) { return Regex.IsMatch(_string, @"^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$"); } } public static void main(string[] args) { string str = "[email protected]"; Console.WriteLine(str.isEmail()); //調用 } } |
-
泛型方法
在 C# 語言中泛型方法是指通過泛型來約束方法中的參數類型,也可以理解為對數據類型設置了參數。
如果沒有泛型,每次方法中的參數類型都是固定的,不能隨意更改。
在使用泛型後,方法中的數據類型則有指定的泛型來約束,即可以根據提供的泛型來傳遞不同類型的參數。
static void Main(string[] args) { //將T設置為double類型 Add<double>(3.3, 4); //將T設置為int類型 Add<int>(3, 4); } //加法運算 private static void Add<T>(T a, T b) { double sum = double.Parse(a.ToString()) + double.Parse(b.ToString()); Console.WriteLine(sum); } |
APS.NET MVC + EF (00)---C#基礎