4

I have an object which implements IList interface, I want to cast it to IList<object> or List<object>, I tried

IList<object> a=(IList<object>)b;
List<object> a=(IList<object>)b;
IList<object> a=(List<object>)b;
List<object> a=(List<object>)b;

These are not working. Please help, thanks. To clarify:

b is an object pass as parameter from outside. It implements IList interface. For example,

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
  }
}

It's because mysql_fetch_object fetches a result row as an object. Others, such as mysql_fetch_array, fetch a result row as an associative array.

4

3 に答える 3

16

そのインターフェイスを実装していない場合、既存のオブジェクトを に変換することはできませんが、 LINQ を使用して簡単に新しいオブジェクトを構築できます。IList<object> List<object>

List<object> = b.Cast<object>().ToList();
于 2013-02-07T19:53:38.623 に答える
3

答えが見つかりました:

IEnumerable<object> a = dataLeaves as IEnumerable<object>;
于 2013-02-07T20:36:40.803 に答える
0

IList単純に ではありませんIList<object>。オブジェクトが実際に両方のインターフェイスを実装する可能性は非常に低いため、キャストは成功しません。を実装する新しいリスト オブジェクトを作成する必要がありますIList<object>

IList<object> a= b.OfType<object>.ToList();
于 2013-02-07T19:54:52.270 に答える