我的問題的列表類型包括此代碼:C#泛型方法的返回類型從
public static class MyStaticClass {
public class MyClass {
public List<object> MyObjects;
public List<Type> MyTypes;
public MyClass() {
MyObjects = new List<object>(){ 1, 0.5F };
MyTypes = new List<Type>(){ typeof{int), typeof(float) }
}
public T GetObject<T>(int index) {
// Should return an instance of type MyTypes[index], and not object
return MyObjects[index] as MyTypes[index];
}
}
public static void Main() {
MyClass myClass = new MyClass();
int arg1 = myClass.GetObject(0);
float arg2 = myClass.GetObject(1);
MyMethod(arg1, arg2);
}
public static void MyMethod(int arg1, float arg2) {
// Does something
}
}
我想MyClass
存儲混合類型和長度可變的列表。我知道這樣做的唯一方法是通過存儲List<object>
。不過,我想在一個方法使用的MyClass.MyObjects
值,但如果我只是得到的值作爲object
,然後將其發送一個錯誤,它無法轉換對象整數,浮點,等等
的問題是我知道MyObjects
中的對象的確切子類型,但是我找不到將MyClass.GetObject
中的T
設置爲MyTypes[index]
類型的方法。我發現的唯一的解決辦法是使用
int arg1 = myClass.MyObjects[0] as int;
float arg2 = myClass.MyObjects[1] as float;
不過,我想這是因爲我只需要設置類型的對象一次,然後只用MyTypes
自動投在MyObjects
的對象。
在此先感謝。
調用方法仍然應該知道在每個索引處存儲哪種類型。你用這個代碼試圖達到什麼目的? –
那麼,爲什麼不只是投射到「T」呢? (是的,這是合法的,轉換將在運行時發生。)您是否期望需要檢測'T'和'MyTypes [index]'之間的不匹配? –
即使你可以在你的方法中進行轉換,調用代碼仍然必須知道要作爲通用參數傳遞的類型。但是,如果你的調用代碼知道實際的類型,我無法看到將返回的對象轉換爲該特定類型的問題 – HimBromBeere