由于某些我无法控制的原因,需要定义我的方法来接受一个对象类型的参数。但我知道这个参数的值实际上是 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)
但不幸的是,我被对象参数困住了。知道我如何解决这个问题吗?
您无法投射它,但您可以使用IEnumerableand 将其投影到列表中Cast。这将为您提供一个新的List<object>. 您将无法修改旧列表,但可以使用新列表并修改其元素。
object obj = new List<Whatever>();
List<object> list = ((IEnumerable)obj).Cast<object>().ToList();
Run Code Online (Sandbox Code Playgroud)