I\'m trying to perform the following cast
private void MyMethod(object myObject)
{
if(myObject is IEnumerable)
{
List
Problem is, you're trying to upcast to a richer object. You simply need to add the items to a new list:
if (myObject is IEnumerable)
{
List<object> list = new List<object>();
var enumerator = ((IEnumerable) myObject).GetEnumerator();
while (enumerator.MoveNext())
{
list.Add(enumerator.Current);
}
}
Have to join the fun...
private void TestBench()
{
// An object to test
string[] stringEnumerable = new string[] { "Easy", "as", "Pi" };
ObjectListFromUnknown(stringEnumerable);
}
private void ObjectListFromUnknown(object o)
{
if (typeof(IEnumerable<object>).IsAssignableFrom(o.GetType()))
{
List<object> listO = ((IEnumerable<object>)o).ToList();
// Test it
foreach (var v in listO)
{
Console.WriteLine(v);
}
}
}
You can't cast an IEnumerable<T> to a List<T>.
But you can accomplish this using LINQ:
var result = ((IEnumerable)myObject).Cast<object>().ToList();
Do you actually need more information than plain IEnumerable
gives you? Just cast it to that and use foreach
with it. I face exactly the same situation in some bits of Protocol Buffers, and I've found that casting to IEnumerable
(or IList
to access it like a list) works very well.
This Code worked for me
List<Object> collection = new List<Object>((IEnumerable<Object>)myObject);
How about
List<object> collection = new List<object>((IEnumerable)myObject);