dynamic不能使用擴充套件方法

2022-02-08 10:11:12 字數 1808 閱讀 1197

一、方法中傳入的引數為dynamic,則返回的也是dynamic型別

例如:

public

string test(string

str)

dynamic t = "11"

;

var t1 = test(t);

t1的型別為

那假如我們再重構test

public

string test(dynamic

str)

結果會是一樣,"11aa",因為在執行的時候t被解析為string型別,會呼叫第乙個方法。

我們重新定義t變數

dynamic t = 11

;

var t1 = test(t);

這個時候結果"11bb",但是返回型別仍然是dynamic,即使我們已經重構了引數為 dynamic的方法,單返回的結果仍然不是string型別,而是dynamic。

二、dynamic型別無法使用本身型別的擴充套件方法。例如,上面例項返回的結果雖然是dynamic型別,然而在解析的時候會當作string型別來處理,但是,dynamic無法使用string型別的擴充套件方法。

例如:

public

static

bool isnotnullorempty(this

string

str)

var t2 = t.isnotnullorempty();
會引發異常,string未包含isnotnullorempty()的定義。其實string是包含了isnotnullorempty() 的方法的,只是該型別為dynamic型別,在解析的時候才是string型別,這樣是不能使用擴充套件的方法的。

那麼是否可以為dynamic寫乙個擴充套件方法,實現上述功能呢,其實也不行。dynamic型別暫時不支援擴充套件方法。

當然僅僅只要實現功能可以自定義乙個方法。

public

static

bool isnotnullorempty(dynamic

dyn)

雖然dynamic無法使用本來型別的擴充套件方法,但是可以使用自帶的方法。

var t2 =t.replace('

1', '

2');

結果如下,同理一,自帶方法的返回結果仍然是dynamic型別。如果明確型別的,可以自己強型別轉換一下就好了。

總結:

1. 對於沒有對結果進行型別轉換的方法,如果引數傳的dynamic型別,那麼結果也是dynamic型別,不管你是否定義了dynamic的返回型別和傳入引數。

2. dynamic無法使用本身型別的擴充套件方法。例如dynamic無法使用string的擴充套件方法。

3. dynamic可以使用本身型別的自帶方法。例如dynamic可以使用string.repalce()方法,但是vs不提供聯想,需要自己補全。

php curl擴充套件不能使用

用的php 7.1.3 curl模組無法使用 環境是是自己配的.在php.ini中,查詢extension php curl.dll 找到後把它前面的分號去掉.如圖 然後再查詢extension dir 配置它的路徑指向php curl.dll 模組對應的資料夾.再然後把libeay32.dll,s...

pdfcrop不能使用

最近,用到了pdfcrop,用來去除pdf中空白的邊。但是使用pdfcrop margins 0 pdf 後,給出了錯誤 error pdfcrop cannot call ghostscript 但是我已經安裝了ctex,裡面已經包含ghostscript,所以就不知道什麼錯誤。在網上針對這個問題...

CGRect CGFloat 不能使用

筆者還在照著別人 敲東西的階段 汗顏哪 言歸正傳,今天敲 的時候發現只要是繼承nsobject的類 都不能使用cgrect cgfloat 會報 unknown type name cgrect did you mean rect or unknown type name cgfloat 糾結了一下...