收藏 分享(赏)

C__程式设计手册.pdf

上传人:精品资料 文档编号:10869701 上传时间:2020-01-16 格式:PDF 页数:603 大小:5.36MB
下载 相关 举报
C__程式设计手册.pdf_第1页
第1页 / 共603页
C__程式设计手册.pdf_第2页
第2页 / 共603页
C__程式设计手册.pdf_第3页
第3页 / 共603页
C__程式设计手册.pdf_第4页
第4页 / 共603页
C__程式设计手册.pdf_第5页
第5页 / 共603页
点击查看更多>>
资源描述

1、1 C# 程式設計手冊 2 Hello World - 您的第一個程式 (C# 程式設計手冊 ) 更新: 2007 年 11 月 下面的主控台程式是傳統的 “Hello World!“ 程式之 C# 版本,它會顯示 Hello World! 的字串。 C# 複製程式碼 / A Hello World! program in C# using System; namespace HelloWorld class Hello static void Main() System.Console.WriteLine(“Hello World!“); / Keep the console window

2、open in debug mode. System.Console.WriteLine(“Press any key to exit.“); System.Console.ReadKey(); /the difference between Read() and ReadKey() 現在讓我們檢查這個程式的幾個重要部分。 註解 : 第一行包含了一段註解: C# 複製程式碼 / A Hello World! program in C# 字元 / 可以將這行的後面部分轉換成註解。您也可以藉由將一段文字區塊包含在 /* 和 */ 的字元間進行註解,例如: C# 複製程式碼 /* A “Hello

3、World!“ program in C#. This program displays the string “Hello World!“ on the screen. */ Main 方法 C# 程式必須包含一個 Main 方法,以便控制項在其中開始和結束。您可以在 Main 方法中建立物件和執行其他方法。 Main 方法是位於一個類別或結構內的一種 靜態方法。在之前的 “Hello World!“ 範例中,位於名為 Hello 的類別中。以下列 出 其中一種方式宣告 Main 方法: 它可以傳回 void: C# 複製程式碼 3 static void Main() /. 它也可以傳回一

4、個 int: C# 複製程式碼 static int Main() /. return 0; 對兩種傳回型別而言,都可使用引數: C# 複製程式碼 static void Main(string args) /. -或 - C# 複製程式碼 static int Main(string args) /. return 0; Main 方法的參數為 string 陣列,代表用來叫用程式的命令列引數。請注意,與 C+ 不同的是,這個陣列不包括可執行檔 (exe) 的名稱。 在 Main 方法的 結尾呼叫 ReadKey 可避免主控台視窗在您按 F5 以偵錯模式執行以讀取輸出之前結束。 如需使用命令

5、列引數的詳細資訊,請參閱 Main() 和命令列引數 (C# 程式設計手冊 ) 和 HOW TO:建立和使用 C# DLL (C# 程式設計手冊 ) 中的範例。 4 輸入和輸出 C# 程式通常使用由 .NET Framework 的執行階段程式庫所提供的輸入 /輸出服務。陳述式 System.Console.WriteLine(“Hello World!“); 使用的 WriteLine 方法,是執行階段程式庫中 Console 類別的輸出方法之一。它會在其後緊接新的一行之標準輸出資料流中,顯示它的字串參數。其他 Console 方法則用於不同的輸入和輸出作業。如果您在程式的開頭加入 usin

6、g System; 指示詞,就可以直接使用 System 類別和方法,而無須指定完整的名稱。如需範例,您可以呼叫 Console.WriteLine,而無須指定 System.Console.Writeline: C# 複製程式碼 using System; C# 複製程式碼 Console.WriteLine(“Hello World!“); 如需輸入 /輸出方法的詳細資訊,請參閱 System.IO。 編譯和執行 您可以在 Visual Studio IDE 中建立一個專案,或 是使用命令列來編譯此 “Hello World!“ 程式。請使用 Visual Studio 命令提示字元或叫用

7、 vsvars32.bat,將 Visual C# 工具集置於命令提示的路徑上。 若要由命令列編譯此程式: 使用任何一種文字編輯器來建立此原始程式檔,並以類似 Hello.cs 的名稱進行儲存。 C# 原始程式碼檔案使用附加檔名 .cs。 若要叫用編譯器,請輸入命令: csc Hello.cs 如果您的程式沒有包含任何編譯錯誤,便會產生一個 Hello.exe 檔案。 若要執行這個程式,請輸入命令 : Hello 如需 C# 編譯器和其選項的詳細資訊,請參閱 C# 編譯器選項 。 5 C# 程式的一般結構 (C# 程式設計手冊 ) 更新: 2007 年 11 月 C# 程式可以由一個或多個檔案

8、組成。每個檔案可以不包含命名空間,也可以包含多個命名空間。一個命名空間除了可以包含其他的命名空間,還可以包含類別、結構、介面、列舉和委派等型別。下面是一個包含所有這些項目的 C# 程式基本架構。 C# 複製程式碼 / A skeleton of a C# program using System; namespace YourNamespace class YourClass struct YourStruct interface IYourInterface delegate int YourDelegate(); enum YourEnum namespace YourNestedName

9、space struct YourStruct class YourMainClass static void Main(string args) /Your program starts here. 6 相關章節 如需詳細資訊: 類別 (C# 程式設計手冊 ) 結構 (C# 程式設計手冊 ) 命名空間 (C# 程式設計手冊 ) 介面 (C# 程式設計手冊 ) 委派 (C# 程式設計手冊 ) C# 語言規格 如需詳細資料,請參閱 C# 語言規格 中的下列章節: 1.2 程式結構 9.1 編譯單位 (命名空間 ) Main() 和命令列引數 (C# 程式設計手冊 ) 更新: 2007 年 11

10、月 Main 方法為 C# 主控台應用程式 (Console Application) 或視窗應用程式的進入點 (程式庫和服務並不需要 Main 方法做為進入點 )。當應用程式啟動時, Main 方法是第一個叫用 (Invoke) 的方法。 C# 程式只能有一個進入點。如果不只一個類別有 Main 方法,您就必須搭配 /main 編譯器選項來編譯程式,以指定要做為進入點的 Main 方法。如需詳細資訊,請參閱 /main (指定 Main 方法的位置 ) (C# 編譯器選項 )。 C# 複製程式碼 class TestClass static void Main(string args) /

11、Display the number of command line arguments: System.Console.WriteLine(args.Length); 概觀 Main 方法為 .exe 程式的進入點,是程式控制的開始及結束位置。 7 Main 是在類別或結構內宣告。 Main 必須是靜態方法,而且不能是 public (在前面範例中,它會接收預設的 private 存取 )。封入類別或結構不一定要是靜態的。 Main 可以有 void 或 int 傳回型別。 宣告 Main 方法時,可以選擇是否搭配包含命令列引數的 string 參數。在使用 Visual Studio 建立

12、 Windows Form 應用程式時,您可以手動加入參數,或者以 Environment 類別來取得命令列引數。參數解釋為索引起始為零的命令列引數。與 C 和 C+ 不同的是,程式名稱不做為第一個命令列引數處理。 本章節內容 命令列引數 (C# 程式設計手冊 ) HOW TO:顯示命令列引數 (C# 程式設計手冊 ) HOW TO:使用 foreach 存取命令列引數 (C# 程式設計手冊 ) Main() 傳回值 (C# 程式設計手冊 ) C# 語言規格 如需詳細資料,請參閱 C# 語言規格 中的下列章節: 1.1 Hello World 命令列引數 (C# 程式設計手冊 ) 更新: 20

13、07 年 11 月 Main 方法可以使用引數,在這種狀況下,它會採用下列格式之一: C# 複製程式碼 static int Main(string args) C# 複製程式碼 static void Main(string args) 注意事項: 若要啟用 Windows Form 應用程式之 Main 方法的命令列引數,您必 須手動修改 program.cs 中 Main 的簽章。 Windows Form 設計工具所產生的程式碼會建立一個不含輸入參數的 Main。您也可以使用 8 Environment:.CommandLine 或 Environment:.GetCommandLin

14、eArgs,從主控台或 Windows 應用程式中的任何點來存取命令列引數。 Main 方法的參數是代表命令列引數的 String 陣列。通常您可以測試 Length 屬性來判斷引數是否存在,例如: C# 複製程式碼 if (args.Length = 0) System.Console.WriteLine(“Please enter a numeric argument.“); return 1; 您也可以使用 Convert 類別或 Parse 方法將字串引數轉換成數字型別。例如,下列陳述式會使用 Parse 方法,將 string 轉換成 long 值: 複製程式碼 long num =

15、 Int64.Parse(args0); 也可以使用 C# 型別的 long,這是 Int64 的別名: 複製程式碼 long num = long.Parse(args0); 您也可以使用 Convert 類別方法 ToInt64 來達成同樣的目的: 複製程式碼 long num = Convert.ToInt64(s); 如需詳細資訊,請參閱 Parse 和 Convert。 範例 下列範例將示範如何在主控台應用程式中使 用命令列引數。程式會在執行階段使用一個引數、將該引數轉換成整數,並且計算該數字的階乘。如果沒有提供引數,這個程式會發出一個解釋該程式正確用法的訊息。 注意事項: 在 Vi

16、sual Studio 中執行應用程式時,您可以在 專案設計工具、偵錯頁 中指定命令列引數。 如需如何使用命令列引數的其他範例,請參閱 HOW TO:建立和使用 C# DLL (C# 程式設計手冊 )。 C# 複製程式碼 9 public class Functions public static long Factorial(int n) / Test for invalid input if (n 256) return -1; / Calculate the factorial iteratively rather than recursively: long tempResult =

17、1; for (int i = 1; i “); return 1; / Try to convert the input arguments to numbers. This will throw / an exception if the argument is not a number. / num = int.Parse(args0); int num; bool test = int.TryParse(args0, out num); if(test = false) System.Console.WriteLine(“Please enter a numeric argument.

18、“); 10 System.Console.WriteLine(“Usage: Factorial “); return 1; / Calculate factorial. long result = Functions.Factorial(num); / Print result. if(result = -1) System.Console.WriteLine(“Input must be 0 and ) 具有一個型別參數,按照慣例,會命名為 T。當您 建立該型別的執行個體時,就要指定清單中內含的物件型別,例如字串。 C# 複製程式碼 List strings = new List();

19、如果使用型別參數,便能重複使用相同類別來保存任何元素的型別,而不需要將每個項目都轉換為 物件 。泛型集合類別稱為強型別集合 (Strongly-Typed Collection),因為編譯器知道集合元素的特定型別。而且,假如您嘗試在上一個範例中將整數加入至 strings 物件,便可能會在編譯時期引發編譯器錯誤。如需詳細資訊,請參閱 泛型 (C# 程式設計手冊 )。 隱含型別、匿名型別和可為 Null 的型別 如先前所述,您可以藉由使用 var 關鍵字,隱含套用區域變數 (但非類別成員 ) 的型別。變數仍然會在編譯時期接收到型別,但型別是由編譯器所提供的。如需詳細資訊,請參閱 隱含型別區域變數

20、 (C# 程式設計手冊 )。 在有些案例中, 對於沒有計劃要在方法界限外儲存或傳遞的一組簡單相關值而言,為其建立具名型別並不方便。針對這個目的,您可以建立匿名型別(Anonymous Type)。如需詳細資訊,請參閱 匿名型別 (C# 程式設計手冊 )。 一般實值型別的值不能為 null。然而藉由在型別後附加 ?,即可以建立可為 Null 的實值型別。例如, int? 這種 int 型別的值也可以是 null。在 CTS 中,可為 Null 的型別都是泛型結構型別為 System:.Nullable) 的執行個體。當資料庫中的數值可能為 null 時,在與該資料庫進行資料來回傳遞時,可為 Nu

21、ll 的型別就特別地好用。如需詳細資訊,請參閱 可為 Null 的型別 (C# 程式設計手冊 )。 相關章節 如需詳細資訊,請參閱下列主題: 轉型和型別轉換 (C# 程式設計手冊 ) Boxing 和 Unboxing (C# 程式設計手冊 ) 實值型別 (C# 參考 ) 參考型別 (C# 參考 ) 類別和結構 (C# 程式設計手冊 ) 匿名型別 (C# 程式設計手冊 ) 泛型 (C# 程式設計手冊 ) 21 C# 語言規格 如需型別的詳細資訊,請參閱 C# 語言規格 中的下列章節: 1.3 型別和變數 3.8 命名空間和型別名稱 4.1 實值型別 4.2 參考型別 4.3 Boxing 和

22、Unboxing 轉型和型別轉換 (C# 程式設計手冊 ) 更新: 2008 年 7 月 因為 C# 在編 譯時期採用靜態型別,所以變數在經過宣告之後,就無法再次宣告或用來儲存任何其他型別的值,除非該型別可以轉換為變數的型別。例如,整數和任意字串間不能轉換。因此,在您將 i 宣告為整數之後,便無法指派字串 “Hello“ 給它,如下列程式碼中所示。 複製程式碼 int i; i = “Hello“; / Error: “Cannot implicitly convert type string to int“ 不過,您有時可能需要將值複製到其他型別的變數或方法參數中。例如,您必須將整數變數傳遞

23、至參數型別為 double 的方法。或者,您可能需要將類別變數指派給介面型別 (Interface Type) 的變數。此類作業稱為型別轉換 (Type Conversion)。在 C# 中,您可以執行以下類型的轉換: 隱含轉換 :不必使用特殊語法,因為這類轉換屬於型別安全轉換,而且不會遺失資料。這類範例包括從小型到大型整數型別的轉換,以及從衍生類別 (Derived Class) 到基底類別 (Base Class) 的轉換。 明確轉換 (轉型 ):明確轉換需要使用轉型運算子。來源與目的變數相容,但可能會遺失資料,因為目的變數的型別大小會小於來源變數 (或是基底類別的來源變數 )。 使用者定

24、義轉換 :使用者定義轉換是由特殊方法執行,您可以定義這些特殊方法,以啟用自訂型別 (不具有基底類別與衍生類別的關聯性 ) 之間的明確和隱含轉換。如需詳細資訊,請參閱 轉換運算子 (C# 程式設計手冊 )。 22 使用 Helper 類別的轉換 :為了在不相容型別 (例如整數與 System:.DateTime 物件或十六進位字串與位元組陣列 ) 之間進行轉換,您可以使用 System:.BitConverter 類別、 System:.Convert 類別和內建數字型別 (Numeric Type) 的 Parse 方法,例如 Int32:.Parse。如需詳細資訊,請參閱 HOW TO:將位

25、元組陣列轉換為 int (C# 程式設計手冊 )、 HOW TO:將 string 轉換為 int (C# 程式設計手冊 ) 和 HOW TO:在十六進位字串和數字型別間轉換 (C# 程式設計手冊 )。 隱含轉換 對於內建數字型別,如果要儲存的值能完全符合變數需求而不需捨去或進位,則可進行隱含轉換。例如, longlong (C# 參考 ) 型別的變數 (8 個位元組整數 ) 可以儲存 intint (C# 參考 ) (32 位元電腦中的 4 個位元組 ) 能夠儲存的任何值。在下列範例中,編譯器會將右邊的值隱含轉換為 long 型別之後,才指派給 bigNum。 C# 複製程式碼 / Impl

26、icit conversion. num long can / hold any value an int can hold, and more! int num = 2147483647; long bigNum = num; 如需隱含數值轉換的完整清單,請參閱 隱含數值轉換表 (C# 參考 )。 針對參考型別 (Reference Type),將類別轉換為其任何直接或間接基底類別或介面時,一律會使用隱含轉 換。不必使用特殊語法,因為衍生類別一定包含基底類別的所有成員。 複製程式碼 Derived d = new Derived(); Base b = d; / Always OK. 明確轉

27、換 如果轉換可能會造成資料遺失,編譯器會要求您執行明確轉換,這稱為轉型(Cast)。轉型是明確告知編譯器您打算進行轉換而且知道可能會造成資 料遺失的一種方式。若要執行轉型,請在要轉換的值或變數前面的括號內指定要轉換的目標型別。下列程式會將 doubledouble (C# 參考 ) 轉型成 intint (C# 參考 )。若沒有進行轉型,就無法編譯程式。 C# 複製程式碼 class Test 23 static void Main() double x = 1234.7; int a; / Cast double to int. a = (int)x; System.Console.Writ

28、eLine(a); / Output: 1234 如需可用的明確數值轉換清單,請參閱 明確數值轉換表 (C# 參考 )。 針對參考型別,如果需要從基底型別轉換成衍生型別,就必須進行明確轉換: 複製程式碼 / Create a new derived type. Giraffe g = new Giraffe(); / Implicit conversion to base type is safe. Animal a = g; / Explicit conversion is required to cast / back to derived type. Note: This will co

29、mpile but / throw an exception at run time if the right-side / object is not in fact a Giraffe. Giraffe g2 = (Giraffe) a; 參考型別之間的轉型作業並不會變更基礎物件的執行階段型別,只會變更做為該物件參考之值的型別。如需詳細資訊,請參閱 多型 (C# 程式設計手冊 )。 執行階段發生的型別轉換例外狀況 對於有些參考型別轉換,編譯器無法判斷轉型是否有效。因此轉型作業編譯正確,但卻可能會在執行階段失敗。如下列範例所示,型別轉換 (Type Cast) 在執行階段失敗將導致擲回 In

30、validCastException。 C# 複製程式碼 class Animal public void Eat() Console.WriteLine(“Eating.“); public override string ToString() return “I am an animal.“; 24 class Reptile : Animal class Mammal : Animal class UnSafeCast static void Main() Test(new Mammal(); / Keep the console window open in debug mode. S

31、ystem.Console.WriteLine(“Press any key to exit.“); System.Console.ReadKey(); static void Test(Animal a) / Cause InvalidCastException at run time / because Mammal is not convertible to Reptile. Reptile r = (Reptile)a; C# 提供 is 和 as 運算子,讓您可在實際執行轉型之前先測試相容性。如需詳細資訊,請參閱 HOW TO:使用 as 和 is 運算子進行安全轉型 (C# 程式設

32、計手冊 )。 C# 語言規格 如需轉型和型別轉換的詳細資訊,請參閱 C# 語言規格 中的下列章節: 7.6.6 轉型運算式 6.1 隱含轉換 6.2 明確轉換 Boxing 和 Unboxing (C# 程式設計手冊 ) 更新: 2008 年 7 月 Boxing 處理是將 實值型別 轉換成 object 型別,或是任何由這個實值型別實作的介面型別。當 CLR Box 處理實值型別時,它會將值包裝在 System.Object 中,並儲存在 Managed 堆積上。 Unbox 處理則會從物件擷取實值型別。在下列範例中,會以 Box處 理整數變數 i,然後將此變數指派給物件 o。 C# 複製程

33、式碼 25 int i = 123; object o = (object)i; / boxing 物件 o 接著即可經 Unbox 處理,並指派給整數變數 i: C# 複製程式碼 o = 123; i = (int)o; / unboxing 效能 相對於單純的指派, Box 和 Unbox 處理是會耗費大量運算資源的處理序。當實值型別經 Box 處理時,必須配置及建構新的物件。 Unbox 處理所需的轉換雖較為簡單,但也同樣需要大量運算資源。如需詳細資訊,請參閱 效能 。 Boxing Boxing 可用 來儲存記憶體回收堆積中的實值型別。 Boxing 是一種隱含轉換,可將 實值型別 轉

34、換成 object 型別,或是任何由這個實值型別實作的介面型別。對實值型別進行 Boxing 作業時,會在堆積上配置物件執行個體,並將值複製至新物件中。 考慮下列實值型別變數的宣告: C# 複製程式碼 int i = 123; 下列陳述式隱含地對變數 i 進行 boxing 作業: C# 複製程式碼 object o = i; / Implicit boxing 這個陳述式的結果是在堆疊中建立物件參考 o,會參考堆積中型別為 int 的值。這個 值是指派給變數 i 之實值型別值的複本。兩個變數 i 和 o 之間的差異會在下圖示範。 Boxing 轉換 26 您也可以執行明確的 boxing 作

35、業,如下列範例所示,但明確的 boxing 作業從來都不是必要的: C# 複製程式碼 int i = 123; object o = (object)i; / explicit boxing 說明 這個範例會使用 Boxing,將整數變數 i 轉換為物件 o。接著,儲存在變數 i 中的值會從 123 變更為 456。這個範例顯示原來的實值型別及 boxed 物件是使用獨立的記憶體位置,因此可以儲存不同的值。 範例 C# 複製程式碼 class TestBoxing static void Main() int i = 123; object o = i; / Implicit boxing i

36、 = 456; / Change the contents of i System.Console.WriteLine(“The value-type value = 0“, i); System.Console.WriteLine(“The object-type value = 0“, o); /* Output: The value-type value = 456 The object-type value = 123 */ 在下列程式碼中,將示範 Unbox 處理無效並產生 InvalidCastException 的案例。程式碼中也會使用 try 和 catch,以在發生錯誤顯示錯

37、誤訊息。 C# 複製程式碼 class TestUnboxing static void Main() int i = 123; object o = i; / implicit boxing 27 try int j = (short)o; / attempt to unbox System.Console.WriteLine(“Unboxing OK.“); catch (System.InvalidCastException e) System.Console.WriteLine(“0 Error: Incorrect unboxing.“,e.Message); 這個程式會輸出: Sp

38、ecified cast is not valid. Error: Incorrect unboxing. 如果您將陳述式: 複製程式碼 int j = (short) o; 更改為: 複製程式碼 int j = (int) o; 就會執行轉換,而且您會得到輸出: Unboxing OK. Unboxing Unbox 處理是將 object 型別明確轉換成 實值型別 ,或從介面型別明確轉換成實作介面的實值型別。 Unboxing 作業包含: 檢查物件執行個體以確定這是指定之實值型別的 boxed 值 將執行個體的值複製到實值型別變數 下列陳述式示範了 boxing 和 unboxing 作業

39、: C# 複製程式碼 int i = 123; / a value type object o = i; / boxing int j = (int)o; / unboxing 下圖示範上述陳述式的結果。 28 Unboxing 轉換 若要在執行階段成功以 Unbox 處理實值型別,要以 Unbox 處理的項目必須是物件的參考,而且物件是先前該實值型別的執行個體經 Box 處理時所建立的物件。嘗試以 Unbox 處理 null 或不相容實值型別的參考時,會導致 InvalidCastException。 C# 語言規格 如需詳細資 料,請參閱 C# 語言規格 中的下列章節: 4.3.1 Box

40、ing 轉換 相關章節 如需詳細資訊: 參考型別 實值型別 C# 語言規格 如需詳細資訊,請參閱 C# 語言規格 中的下列章節: 4.3 Boxing 和 Unboxing HOW TO:使用 as 和 is 運算子進行安全轉型 (C# 程式設計手冊 ) 更新: 2008 年 7 月 由於物件都是多型的,因此可以使用某個基底類別 (Base Class) 型別的變數來存放衍生型別 (Derived Type)。若要存取衍生型別的方法,您必須將值轉型回衍生型別。不過,在這種情況下嘗試進行簡單轉型卻會有擲回 InvalidCastException 的風險。這就是 C# 提供 is 和 as 運算

41、子的原因。您可以使用這兩個運算子測試轉型能否成功,而不會擲回例外狀況 (Exception)。as 運算子通常比較有效率,因為如果轉型能夠成功,它實際會傳回轉型值。 is 運算子卻只會傳回布林值,因此它可以用在只是要確定物件的型別而不必實際轉型的情況。 範例 29 在下列範例中,會示範如何使用 is 和 as 運算子,在無擲回例外狀況風險的情況下,從某一個參考型別 (Reference Type) 轉型成另一個型別。此外,還會示範如何使用 as 運算子搭配可為 null 的實值型別 (Nullable Type)。 C# 複製程式碼 class SafeCasting class Animal

42、 public void Eat() Console.WriteLine(“Eating.“); public override string ToString() return “I am an animal.“; class Mammal : Animal class Giraffe : Mammal class SuperNova static void Main() SafeCasting app = new SafeCasting(); / Use the is operator to verify the type. / before performing a cast. Gira

43、ffe g = new Giraffe(); app.UseIsOperator(g); / Use the as operator and test for null / before referencing the variable. app.UseAsOperator(g); / Use the as operator to test / an incompatible type. SuperNova sn = new SuperNova(); app.UseAsOperator(sn); / Use the as operator with a value type. / Note t

44、he implicit conversion to int? in / the method body. int i = 5; app.UseAsWithNullable(i); 30 double d = 9.78654; app.UseAsWithNullable(d); / Keep the console window open in debug mode. System.Console.WriteLine(“Press any key to exit.“); System.Console.ReadKey(); void UseIsOperator(Animal a) if (a is

45、 Mammal) Mammal m = (Mammal)a; m.Eat(); void UseAsOperator(object o) Mammal m = o as Mammal; if (m != null) Console.WriteLine(m.ToString(); else Console.WriteLine(“0 is not a Mammal“, o.GetType().Name); void UseAsWithNullable(System.ValueType val) int? j = val as int?; if (j != null) Console.WriteLine(j); else Console.WriteLine(“Could not convert “ + val.ToString();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报