C#如何将具有IList的对象转换为IList <object>?

Lan*_*e H 3 c#

我有一个实现IList接口的对象,我想把它投射到IList<object>或者 List<object>,我试过了

IList<object> a=(IList<object>)b;
List<object> a=(IList<object>)b;
IList<object> a=(List<object>)b;
List<object> a=(List<object>)b;
Run Code Online (Sandbox Code Playgroud)

这些都不起作用.请帮忙,谢谢.澄清:

b是从外部作为参数传递的对象.它实现了IList接口.例如,

public class a
{
  string name;
  List<a> names;
}
public void func(object item)
{
  object dataLeaves = data.GetType().GetProperty("names").GetValue(dataInput, null);
  if (dataLeaves != null && dataLeaves.GetType().GetInterfaces().Any(t =>t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IList<>)))
  {
    List<object> a=(List<object>) dataLeaves; //Need to convert the dataLeaves to list or IList
  }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 15

如果现有对象IList<object>没有实现该接口,则无法将其转换为现有对象,但您可以使用LINQ轻松构建新对象 List<object>:

List<object> = b.Cast<object>().ToList();
Run Code Online (Sandbox Code Playgroud)

  • @JerKimball:在大多数情况下,我确实使用`Cast`**同样的原因:如果我希望集合中的每个元素都是特定类型,如果我的期望不正确,我想要抛出异常.如果这个世界不符合我的期望,我通常想尽快拯救,而不是默默地忽略我没想到的价值观.有时候后一种方法*是合适的 - 但我发现它们比想要一个例外的频率低. (2认同)