获取匿名列表的类型 [英] Get The type of anonymous list

查看:53
本文介绍了获取匿名列表的类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,
假设

Hi all,
let suppose

var res = result.Select(s=> new {id=s.id,name=s.name}).ToList();

现在,我想通过诸如func(res)之类的其他方法来传递此res.
请告诉我如何获取此资源的类型或如何从资源中获取数据.

now i want pass this res in another method like func(res).
Please tell me that how can i get the type of this res or how i can get data from res.

推荐答案

您将无法执行匿名操作类作为变量,因为它仅在此范围的上下文中使用且有效.您将需要创建一个具体的类或结构.
You won''t be able to pas the anonymous class as a variable since it is only used and valid with the context of this scope. You will need to create a concrete class or struct.


嗯,在.NET 4中使用新的"dynamic"关键字可以做到这一点. :但是,无论您是否应该这样做,都需要仔细评估.

考虑:
Well, there is a "back-door" way to do this, using the new ''dynamic'' keyword in .NET 4: but whether you should do this, or not, you need to carefully evaluate.

Consider:
List<int> newList = new List<int> {1, 2, 3};

// you could also use .ToList<int>() here
var result = newList.Select(itm => itm).ToList();

UseListMadeUsingVar(result);

,函数''UseListMadeUsingVar是:

And the function ''UseListMadeUsingVar is:

private void UseListMadeByVar(dynamic aList)
{
    Type type = aList.GetType();

    bool isListInt = aList is List<int>;
}


通过将输入参数声明为动态",可以从本质上避免编译时类型检查.

建议您运行上面的代码,在设置了布尔变量"isListInt"之后放置一个断点,并检查"type"和"isListInt"的值以验证您是否获得了List< int>.传入.

然后,您需要考虑如何处理以这种方式传递的后期绑定结果:使用前是否需要进行类型检查?


By declaring the input parameter as ''dynamic'' you essentially avoid compile-time type checking.

Suggest you run the above code, put a break-point after the boolean variable ''isListInt is set, and examine the values of both ''type and ''isListInt to verify that you are getting a List<int> passed in.

And then, you need to think about what you might need to do with a late-bound result passed in this way: do you need to type-check before using ?


这篇关于获取匿名列表的类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆