C#将MyType的列表转换为对象列表

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)

有人可以帮忙吗?

Mar*_*zek 8

你的问题不是100%明确,所以我认为你面临的问题是你在标题中提出的问题:

将MyType的列表转换为对象列表

作为@Charles说,IList<T>List<T>不是变异,所以你可以不投IList<DerivedClass>IList<BaseClass>.你必须创造新的List<BaseClass>.

有很多方法可以做到这一点,我认为你应该考虑两个:

  1. 你可以使用CastToList,但它需要using System.Linq.

    var listOfStrings = new List<string>() { "foo", "bar" };
    var listOfObjects = listOfStrings.Cast<object>().ToList();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 为避免这种情况,您可以使用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)