[英]Can't do (expression yielding System.Type)object cast?
我有一個object []數組,其中包含一些內置類型的混合,比如Int / Byte / String,我試圖在運行時從對象轉換為正確的類型,然后將該轉換的數據交給第三方庫具有Write(內置類型重載)方法。
我以為我可以做Obj.Write((表達式產生System.Type)objArg),但它對我有誤。
這是一個更好地解釋它的代碼示例:
object testData = (int)42;
int final = (GetAType())testData;
private Type GetAType()
{
return typeof(Int32);
}
有什么建議么? 實現這一目標的替代方法也會有所幫助。
對於某些情況,這是我原來的問題。 第三方庫,有一堆不同類型的重載。
3rdPartyLibrary.Write(bool source)
3rdPartyLibrary.Write(int16 source)
3rdPartyLibrary.Write(int32 source)
3rdPartyLibrary.Write(string source)
我正在嘗試在3rdPartyLibrary和我的其余代碼之間抽象一層
Such that I can have
Object[int32]
Object[int16]
Object[string]
Object[int32]
我正在嘗試做一些簡單的看似,像這樣(偽造的)
loop Object[]
{
3rdPartyLibrary.Write( (object[i].GetType()) object[i] )
}
我一直在閱讀所有類似的聲音問題,看起來這可能是不可能的?
強制轉換是編譯時構造; 你不能在演員操作符中使用調用的結果。
有兩種方法可以解決您的問題。
如果您使用的是.NET 4:
3rdPartyLibrary.Write((dynamic)object[i]);
否則,您將必須使用反射根據參數類型選擇正確的重載,然后調用它。
你正在尋找的東西是沒有意義的,因為結果仍然必須為所有操作都有一個類型,並且必須是處理所有不同類型的object
。
只需為您支持的類型使用開關:
foreach (object item in Object) {
switch (item.GetType().Name) {
case "System.Int16":
3rdPartyLibrary.Write((Int16)item);
break;
case "System.Int32":
3rdPartyLibrary.Write((Int32)item);
break;
case "System.Boolean":
3rdPartyLibrary.Write((bool)item);
break;
case "System.String":
3rdPartyLibrary.Write((string)item);
break;
default:
throw new ArgumentException("Unhandled type '" + item.GetType().Name + "'.");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.