のリストから私の問題は、このコードが含まれます。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
として取得すると、オブジェクトをint、floatなどに変換できないというエラーが送信されます。
問題は私はMyObjects
のオブジェクトの正確なサブタイプを知っていますが、T
をMyClass.GetObject
のMyTypes[index]
に設定する方法が見つかりません。私が見つけた唯一の解決策は、
int arg1 = myClass.MyObjects[0] as int;
float arg2 = myClass.MyObjects[1] as float;
を使用することですしかし、私はそれが私は一度だけ、オブジェクトの種類を設定してからちょうど自動的MyObjects
内のオブジェクトをキャストするMyTypes
を使用する必要があることになりたいです。
ありがとうございます。
呼び出しメソッドは、各インデックスに格納されている型が分かっている必要があります。あなたはこのコードで何を達成しようとしていますか? –
なぜ、単に 'T'にキャストしていないのですか? (そうです、それは合法です、実行時に変換が行われます) 'T 'と' MyTypes [index]'の不一致を検出する必要があると思いますか? –
あなたのメソッド内でキャストできたとしても、呼び出し側のコードでは、ジェネリックパラメータとして渡す型を知る必要があります。しかし、あなたの呼び出しコードが実際の型を知っていれば、返されたオブジェクトをその特定の型にキャストする際に問題を見ることができません。 – HimBromBeere