将对象转换为 List<object>

Roc*_*ndy 1 c#

由于某些我无法控制的原因,需要定义我的方法来接受一个对象类型的参数。但我知道这个参数的值实际上是 List 类型,带有一个我不知道的泛型参数。

我正在尝试将此对象强制转换为 List<object>,但在不知道确切的泛型参数是什么的情况下不知道如何执行此操作。

我想做这样的事情:

public static List<object> ConvertToList(object input)
{
    if (input.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List<>))) 
    {
        //Of course this does not work, because input might for example be of type List<string>
        return (List<object>) input;
    }
    else
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道,如果我有List<T>而不是object input,使用它会很容易:

return input.Cast<object>()
Run Code Online (Sandbox Code Playgroud)

但不幸的是,我被对象参数困住了。知道我如何解决这个问题吗?

Joh*_* Wu 8

您无法投射它,但您可以使用IEnumerableand 将其投影到列表中Cast。这将为您提供一个新的List<object>. 您将无法修改旧列表,但可以使用新列表并修改其元素。

object obj = new List<Whatever>();
List<object> list = ((IEnumerable)obj).Cast<object>().ToList();
Run Code Online (Sandbox Code Playgroud)