記錄 C# 3.0 兩大核心特性的語法要點、限制與實戰應用模式,作為快速查閱參考。
var i = 123; // int
var d = 123.123; // double
var s = "oec2003"; // string
var arr = new[] { 1, 2, 3, 4 }; // int[]
var x; x = 1; → 編譯錯誤var x = null; → 編譯錯誤for、foreach、using 陳述式
var x = 10;
x = "abc"; // 編譯錯誤:無法將 string 轉換為 int
var 非動態型別,編譯期確定為具體型別,IL 與顯式宣告無異。
this 修飾,型別為擴充目標
public static class StringExtensions
{
public static bool IsValidEmail(this string s)
{
if (string.IsNullOrEmpty(s)) return false;
return Regex.IsMatch(s, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
}
}
// 使用:像呼叫實例方法一樣
string email = "test@example.com";
if (email.IsValidEmail())
Console.WriteLine("Valid");
else
Console.WriteLine("Invalid");
擴充方法所在命名空間必須被 using 導入才可見。建議將通用擴充方法置於專用命名空間(如 MyApp.Extensions),按需導入。
using 命名空間的擴充方法using 命名空間的擴充方法
public static class EnumerableExtensions
{
public static bool IsNullOrEmpty<T>(this IEnumerable<T> source)
{
return source == null || !source.Any();
}
}
// 使用
List list = null;
if (list.IsNullOrEmpty()) { /* ... */ }
query.Where(...).OrderBy(...).Select(...)string, int 等),污染全域命名空間