C#如何把List of Object转换成List of T具体类型

上周码程序的时候碰到个问题,因为设计上的约束,一个方法接受的参数只能为List<object>类型,然而该方法需要处理的真实数据则是确定的List<Currency>。然而C#不允许显示的直接转换类型,并且两个方向上都不可以操作。这个问题让我爆了一会儿,最后在MSDN上找到了一个OfType<T>的拓展方法可以完成这件事。

Enumerable.OfType<TResult> 方法:

此方法通过使用延迟执行实现。 即时返回值为一个对象,该对象存储执行操作所需的所有信息。 只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach(或 Visual Basic 中的 For Each)来枚举该对象时,才执行此方法表示的查询。

OfType<TResult>(IEnumerable) 方法仅返回 source 中那些可以转换为 TResult 类型的元素。 如果元素不能转换为 TResult 类型,但却不想接收异常,则使用 Cast<TResult>(IEnumerable)。

此方法是少数标准查询运算符方法之一,标准查询运算符方法可应用于含有非参数化类型(如 ArrayList)的集合。 这是因为 OfType<TResult> 扩展了类型 IEnumerable。 OfType<TResult> 不仅无法应用于基于参数化的 IEnumerable<T> 类型的集合,也无法应用于基于非参数化的 IEnumerable 类型的集合。

通过将 OfType<TResult> 应用于实现 IEnumerable 的集合,可以获得使用标准查询运算符查询集合的能力。 例如,将 Object 的类型参数指定为 OfType<TResult> 将返回一个对象,其类型为 C# 中的 IEnumerable<Object> 或 IEnumerable(Of Object) 中的 Visual Basic,标准查询运算符可应用于该对象。

来看个直观的例子:

static void Main(string[] args)
{
    List<object> currencyList = new List<object>()
    {
        new Currency(){Id = Guid.NewGuid(), Name = "a"},
        new Currency(){Id = Guid.NewGuid(), Name = "b"},
        new Currency(){Id = Guid.NewGuid(), Name = "c"}
    };

    List<object> currencyList1 = new List<object>()
    {
        "a", "b", "c"
    };

    List<Currency> currencies = currencyList.OfType<Currency>().ToList();
    List<Currency> currencies1 = currencyList1.OfType<Currency>().ToList();

    Console.WriteLine("currencies list:");
    foreach (var item in currencies)
    {
        Console.WriteLine(item.Id);
    }

    Console.WriteLine("currencies1 list:");
    foreach (var item in currencies1)
    {
        Console.WriteLine(item.Id);
    }
}

这段代码中,currencies中是合法的Currency对象,所以可以被转换。而currencies1中是string对象,不是Currency,所以不能被转换,也不会抛异常。最后currencies1的结果是个空的List,而不是null。这段代码的输出结果如下:

时间: 2024-08-01 10:46:54

C#如何把List of Object转换成List of T具体类型的相关文章

List&lt;Object&gt;转换成Map&lt;String,Object&gt;形式

上一篇讲到了将List<Map<String,Object>> 转换为 List<javaBean>,这次反过来: /** * 用于把List<Object>转换成Map<String,Object>形式,便于存入缓存 * @author zhang_bo * @param keyName 主键属性 * @param list 集合 * @return 返回对象 */ private <T> Map<String, T>

将Object转换成List&lt;?&gt;,避免Unchecked cast: &#39;java.lang.Object&#39; to &#39;java.util.List&lt;java.lang.String&gt;&#39;

java中如果需要将一个object转成list,大部分人会直接使用强制类型转换:(List<String>) obj这样.这样强制转换编译会提示Unchecked cast: 'java.lang.Object' to 'java.util.List<java.lang.String>',编译器的意思该强制类型转换并未做类型校验,强制转换并不安全,可能会抛出异常导致程序崩溃.在很多博客中有人会建议用@SuppressWarnings("unchecked")解

将Object转换成Dictionary方法

如果Object是Dictionary类型,直接返回 如果Object是NameValueCollection类型,则添加到Dictionary里 如果Object是Hashtable类型,添加到Dictionary里 ...其他键值类型请自己完善 如果Object非上述类型,则用IL语言将其转换成Dictionary类型, 具体代码如下: public static Dictionary<string, object> ConvertFromObject(object obj) { if (

java中Object转换成int或String类型方法

转载: http://www.cnblogs.com/1020182600HENG/p/6137206.html Object obj = getObject(); if(obj instanceof Integer) int value = (Integer)obj; 1 String转换为int类型的方法: 1. Integer.parseInt([String]) 2.Integer.valueOf([String]).intValue(); 3.Integer.decode([Strin

[Java类型转换] Object 转换成 String 的三种方法

方法一:Object.toString() obj.toString() 注意:必须保证Object不是null值,否则将抛出NullPointerException异常. 方法二:(String)Object Object o = new Integer(100); String string = (String)o; 注意:需要转换的类型必须是能够转换为String的,否则会出现CalssCastException异常错误. 方法三:String.valueOf(Object) 在使用Str

Map中object转换成boolean类型

Ajax请求查询数据之后,返回的是map类型, resultMap.put("flag", flag); 在接收到数据之后判断时,转换出现异常,导致页面点击按钮之后,页面没有反应,http请求报404异常,一个风马牛不相及的请求响应.后台也没有报错. 检查后台代码发现,处理判断时出现异常, resultMap.get("flag") != null && ((String)resultMap.get("flag")).equals

Ilist&lt;object&gt;转换成I&lt;实体&gt; 如何转换

ml = objects.Cast<menu>().ToList(); //需要 using System.Linq;

什么是LambdaExpression,如何转换成Func或Action(2)

序言 在上一篇中,我们认识了什么是表达式树.什么是委托,以及它们的关系.可能是我功力不好,貌似大家都不怎么关注,没有讲解出不同角度的问题. 学习一种新技术,是枯燥的过程,只有在你掌握后并能运用时才能从它身上得到乐趣. 做程序开发是一群很奇怪的人群,我们居然可以通过密密麻麻的英文字符加上标点符号从中找到乐趣,确实很奇怪. 考虑到大家接触新技术需要一个过程: 其实对于很多人来说已经不是新技术了,不过您会耐心看本篇后续的文章,说明您可能对这一项技术运用的并不是很熟练 所以我不打算一上来,就放一大堆代码

如何将PDF文件转换成word文档格式

以前看一些视频的时候,视频文件会有很多种格式,因为格式播放问题经常会需要转换这些格式.于此相同,现在的一些文档格式的类型也有很多种,有时为了方便应用也会需要转换成不同的文档格式,如何将PDF文档转换成word就是常需要应用到的. 很多文档格式都可以保存输出成PDF文件格式,相同的,将PDF格式也可以转换成其他的文档类型.例如我们常见的一些word,ppt,Excel以及图片文件.并且大部分文档之间也可以进行格式转换.?a.文档格式的转换也是有对应的转换工具的.可以先安装PDF转换器并打开.把PD