5 4 3 1 C 3 0 中的型別推斷

2021-06-26 12:30:41 字數 919 閱讀 1186

5.4.3.1 c# 3.0 中的型別推斷

在 c# 中,值型別推斷主要用 var 關鍵字表示,這是 c# 3.0 的新功能。我們前面已經看到,但通過清單 5.12 的幾個例子,我們可以更詳細地討論一下。

清單 5.12 使用 var 關鍵字進行型別推斷 (c#)

var num = 10 + (2 * 16);

var str = string.concat(new string);

var unk = null;    [1]  錯誤

型別推斷機制是主要看賦值運算子的右邊,得出表示式的型別。即使不使用 var,也要這樣做,以確保要賦給的變數與要賦的值相相容。示例的最後一行[1],c# 編譯器無法推斷型別,報告錯誤訊息。文字 null 可以隱式轉換成任何 .net 引用型別(甚至是可空的值型別),而它本身並不是真正的 .net 型別。編譯器不知道我們想給變數 unk 哪種型別,因此,必須顯式指定型別。我們早先在 option 型別中使用過 var 關鍵字,那麼,就來詳細分析幾個示例:

var s1 = option.some(10);

var s2 = option.some(10);

var n1 = option.none();

var n2 = option.none();

第一和第三行並出人意料,我們呼叫泛型方法,並顯式指定了型別引數值,因此,編譯器可以推斷出返回型別;第二行,我們沒有為方法指定型別引數值,但編譯器知道第乙個引數值的型別必須與型別引數值相容,因此,正確推斷出要建立的值型別為option2;最後一行,會報錯「不能從方法 '… ' 的用法推斷出它的型別引數。」這是因為,在這裡,編譯器沒有足夠的線索,知道應該是什麼型別。

在 c# 中的型別推斷在很多方面都是有限制的,但仍然非常有用;在 f# 中,演算法更智慧型,能夠推斷出更多的型別。下面,我們看一些 f# 示例。

5.4.3.2 f# 中的型別推斷

C 中變數的推斷式宣告

這裡是c 吸取很多動態語言的變數宣告方式 這是在.net framework3之後才支援的 var type variable value 變數必須初始化,否則無法推斷其型別。不可以用null 對變數進行初始化 eg vardemo.cs using system namespace vardemo...

6 6 1 F 中函式呼叫的型別推斷

6.6.1 f 中函式呼叫的型別推斷 雖然,在 f 中可以用尖括號指定型別引數值,與 c 中的方式相同,但這種方法很少使用。原因是,當編譯器無法推斷出所有的資訊,需要程式設計師的幫助時,我們僅在真正需要的地方,新增型別批註。我們用乙個示例來演示 option.map fun dt dt.year s...

c 判斷 泛型t 型別 C 泛型方法的型別推斷

這裡所謂的 泛型方法的型別推斷 指的是根據已有的方法實參的型別,推斷出泛型方法的型別實參。例如乙個泛型方法 void method t args 如果我給出方法實參型別是 int,那麼希望能夠推斷出 t int。或者舉個複雜點的例子,對於下面的泛型方法定義 void method ilist a,p...