[英]Can C# return a type in a method?
我可以有類似的東西嗎?
AMess.Foo = MessyData.GetData<MessyData.GetType(key)>(key);
?
我的問題類似於我的示例。 我有一個動態輸入的數據源,所以我必須做一些確定數據類型的事情。 但是到處都進行類型檢查會很麻煩。 所以我想也許我可以有一些代碼只是告訴我它是什么類型。 我可以這樣做嗎?
還是更好的解決方案?
請不要擔心AMess.Foo
,它吃了所有東西。
不,不能。 您必須改為使用反射。 我目前尚未在計算機上安裝Visual Studio,因此目前無法測試語法,但這應該很接近:
var type = MessyData.GetType(key);
var castMethod = MessyData.GetType().GetMethod("GetData").MakeGenericMethod(type);
AMess.Foo = castMethod.Invoke(MessyData, new[] { key });
不能。泛型類型參數必須在編譯時解析。
如果您使用:
MessyData.GetData<SomeType>(key);
那么SomeType
必須是特定類的名稱(或接口,結構等)。 它永遠不可能是您所提問題中的一種表達方式 。
如果讓類型被推斷,如:
MessyData.GetData(key); // infer type arg
則調用中使用的類型是key
變量的編譯時類型, 而不是運行時類型。 這些類型可以不同。
如果您確實想要動態類型化,則可以讓GetData
接受一個dynamic
類型的參數(該方法將是非通用的)。 但是您要解決的問題是什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.