Ahm*_*zey 2 .net c# reflection casting
我正在编写一个应用程序,我需要使用Reflection来调用一个具有MyObject类型参数的方法.
Method (List<MyObject> input , out List<MyObject> output,..... );
Run Code Online (Sandbox Code Playgroud)
使用反射我发送Object类型的参数.我怎么能投List<MyObject>给List<object>
var parameters = new Object[] { inputs, outputs, userPrams };
System.Type classType = typeof(MyClass);
object instance = Activator.CreateInstance(classType);
classType.InvokeMember(name, BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public,null, instance, parameters);
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,输入和输出都是MyObject类型的列表
我试图将它们转换为对象列表,但这不起作用
x.Outputs = grOutputs as IList<object>
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
你的问题不是100%明确,所以我认为你面临的问题是你在标题中提出的问题:
将MyType的列表转换为对象列表
作为@Charles说,IList<T>而List<T>不是变异,所以你可以不投IList<DerivedClass>给IList<BaseClass>.你必须创造新的List<BaseClass>.
有很多方法可以做到这一点,我认为你应该考虑两个:
你可以使用Cast和ToList,但它需要using System.Linq.
var listOfStrings = new List<string>() { "foo", "bar" };
var listOfObjects = listOfStrings.Cast<object>().ToList();
Run Code Online (Sandbox Code Playgroud)为避免这种情况,您可以使用new List<T>(IEnumerable<T> source)构造函数.因为IEnumerable<T>是协变的,你可以这样做:
var listOfStrings = new List<string>() { "foo", "bar" };
var listOfObjects = new List<object>(listOfString);
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1710 次 |
| 最近记录: |