我的问题的列表类型包括此代码: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