c#中dynamic型別作為泛型引數傳遞過去後,反射出來的物件型別是object,我用老外的這篇博文中的**跑起來,得出的結果是:flying using a object map (a map),將fly(t map)方法的**改為如下**,即可獲取dynamic物件的原始型別:
type t = typeof(t);
if (t == typeof(object
))console.writeline(
"flying using a map ()
", t.name, map);
實際專案中用到了mvccontrib,在呼叫orderby時傳入的是iqueryable物件,反射此類物件的屬性時,會報異常,mvccontrib.sorting中**是這樣的:
publicstatic iqueryableorderby(this iqueryabledatasource, string
propertyname, sortdirection direction)
var type = typeof
(t);
var property =type.getproperty(propertyname); //這裡報異常
if(property == null
) ' on type
", propertyname, type));
}var parameter = expression.parameter(type, "p"
);
var propertyaccess =expression.makememberaccess(parameter, property);
var orderbyexp =expression.lambda(propertyaccess, parameter);
const
string orderby = "
orderby";
const
string orderbydesc = "
orderbydescending";
string methodtoinvoke = direction == sortdirection.ascending ?orderby : orderbydesc;
var orderbycall = expression.call(typeof
(queryable),
methodtoinvoke,
new ,
datasource.expression,
expression.quote(orderbyexp));
return datasource.provider.createquery(orderbycall);
}
原因是呼叫此方法時,如果傳入的泛型是dynamic,typeof(t)得出的結果是object,接下來的property將會出異常。
解決的辦法是:在 var type = typeof(t); 後面加一段判斷語句,**如下:
var type = typeof(t);
if(type == typeof(object
))
這樣就可以獲取iqueryable的原始型別。
C 資料型別(dynamic)
自己在寫重構的時候用到了dynamic這個函式,然後就去網上找個找關於這個函式的有關內容,首先是對這個函式認識。關於這個函式乙個籠統的認識就是這個函式和var一樣是個萬能函式,什麼樣的資料型別符合,如果我們在用到用於接受一些資料的時候,但是這個傳過來的資料型別我們不知道是什麼型別的,那我們就可以用d...
SwiftUI中的動態型別Dynamic Type
今天我想和您談談swiftui中對動態型別的支援。我認為,如果您的應用中沒有動態型別支援,就無法創造出色的使用者體驗。swiftui為任何文字表示形式提供了開箱即用的動態型別,並簡化了我們的工作。但是我們仍然需要做一些工作,所以讓我們談談它。動態型別功能允許使用者選擇螢幕上顯示的文字內容的大小。它可...
C 使用dynamic型別訪問JObject物件
dynamic是c 裡面的動態型別,可在未知型別的情況訪問對應的屬性,非常靈活和方便。使用json.net可以把乙個json字串轉換成乙個jobject物件,如果有已知強型別,如果有已知對應的強型別,可以直接轉成對應的型別。但如果沒有,要訪問json裡面對應的資料的時候,就顯得比較麻煩。我們可以借助...