繁体   English   中英

投IEnumerable <object> 列表 <object>

[英]Cast IEnumerable<object> to List<object>

我有以下代码:

public IList<MyObject> GetSomeData(string inputParam)
{
    var temp = repository.GetData(inputParam);
    var list = temp as List<MyObject>;
    return list;
}

repository.GetData的返回值是IEnumerable<IMyObject>

当我查看temp的值时,它有400多条记录。 我把它投射到列表的那一刻,它变成了空。 为什么这个演员不可能?

它返回null,因为IEnumerable实际上不是列表。 只有当特别是IEnumerable碰巧是List而不是其他类型的序列时, IEnumerable才会成功。 如果要有列表,则需要创建新列表并将序列中的项添加到该列表中。

除非从repository.GetData返回的值的基础对象与您尝试将其转换为的内容匹配,否则结果将始终为null 因为方法的泛型元素类型和从repository.GetData实际返回的内容是不同的,所以您需要进行一些转换才能获得所需的结果

假设MyObject实现了IMyObject我至少可以想到使用System.Linq获取你寻求的结果的方法。

选项1: Cast<T>()

将System.Collections.IEnumerable的元素转换为指定的类型。

首先使用Cast<MyObject>() linq扩展转换temp的内容,然后使用ToList<T>()扩展方法获得IList<MyObject>

public IList<MyObject> GetSomeData(string inputParam)
{
    //repository.GetData returns IEnumerable<IMyObject>
    var temp = repository.GetData(inputParam);
    var list = temp.Cast<MyObject>().ToList();
    return list;
}

选项2: OfType<T>()

根据指定的类型过滤System.Collections.IEnumerable的元素。

使用OfType<MyObject>() linq扩展名过滤temp的内容,然后使用ToList<MyObject>()扩展方法获取IList<MyObject>

public IList<MyObject> GetSomeData(string inputParam)
{
    //repository.GetData returns IEnumerable<IMyObject>
    var temp = repository.GetData(inputParam);
    var list = temp.OfType<MyObject>().ToList();
    return list;
}

演员收到 object 到列表<object>或 IEnumerable<object><div id="text_translate"><p> 我正在尝试执行以下演员</p><pre>private void MyMethod(object myObject) { if(myObject is IEnumerable) { List&lt;object&gt; collection = (List&lt;object&gt;)myObject; ... do something } else {... do something } }</pre><p> 但我总是以以下异常结束:</p><p> 无法将“System.Collections.Generic.List 1[MySpecificType]' to type 'System.Collections.Generic.List</p><p> 我真的需要这个工作,因为这个方法需要非常通用才能接收单个对象和 collections 两种未指定的类型。</p><p> 这是可能的,还是有另一种方法可以做到这一点。</p><p> 谢谢你。</p></div></object></object>

[英]Cast received object to a List<object> or IEnumerable<object>

将 object 投到列表中<object><div id="text_translate"><p>由于某些我无法控制的原因,需要定义我的一种方法来接受 object 类型的一个参数。 但我知道这个参数的值实际上是 List 类型,带有一个我不知道的通用参数。</p><p> 我正在尝试将此 object 转换为 List&lt;object&gt;,但不知道如何在不知道确切的通用参数是什么的情况下执行此操作。</p><p> 我想做这样的事情:</p><pre> public static List&lt;object&gt; ConvertToList(object input) { if (input.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List&lt;&gt;))) { //Of course this does not work, because input might for example be of type List&lt;string&gt; return (List&lt;object&gt;) input; } else { return null; } }</pre><p> 我知道,如果我有List&lt;T&gt;而不是object input ,使用以下方法会很容易:</p><pre> return input.Cast&lt;object&gt;()</pre><p> 但不幸的是,我坚持使用 object 参数。 知道如何解决这个问题吗?</p></div></object>

[英]Cast object to List<object>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 演员收到 object 到列表<object>或 IEnumerable<object><div id="text_translate"><p> 我正在尝试执行以下演员</p><pre>private void MyMethod(object myObject) { if(myObject is IEnumerable) { List&lt;object&gt; collection = (List&lt;object&gt;)myObject; ... do something } else {... do something } }</pre><p> 但我总是以以下异常结束:</p><p> 无法将“System.Collections.Generic.List 1[MySpecificType]' to type 'System.Collections.Generic.List</p><p> 我真的需要这个工作,因为这个方法需要非常通用才能接收单个对象和 collections 两种未指定的类型。</p><p> 这是可能的,还是有另一种方法可以做到这一点。</p><p> 谢谢你。</p></div></object></object> 将对象转换为IEnumerable <object> ? Cast List之间的区别是什么? <object> 和Cast IEnumerable <object> 从IEnumerable转换为IEnumerable <object> 将对象转换为IEnumerable 如何投射IEnumerable <object> 到一个IEnumerable <runtime type> 为什么IEnumerable <struct> 转换为IEnumerable <object> ? 演员表 <object> 到IEnumerable <T> 一般任务中 将 object 投到列表中<object><div id="text_translate"><p>由于某些我无法控制的原因,需要定义我的一种方法来接受 object 类型的一个参数。 但我知道这个参数的值实际上是 List 类型,带有一个我不知道的通用参数。</p><p> 我正在尝试将此 object 转换为 List&lt;object&gt;,但不知道如何在不知道确切的通用参数是什么的情况下执行此操作。</p><p> 我想做这样的事情:</p><pre> public static List&lt;object&gt; ConvertToList(object input) { if (input.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List&lt;&gt;))) { //Of course this does not work, because input might for example be of type List&lt;string&gt; return (List&lt;object&gt;) input; } else { return null; } }</pre><p> 我知道,如果我有List&lt;T&gt;而不是object input ,使用以下方法会很容易:</p><pre> return input.Cast&lt;object&gt;()</pre><p> 但不幸的是,我坚持使用 object 参数。 知道如何解决这个问题吗?</p></div></object> 无法转换对象以键入类型为ienumerable的查询
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM