从函数返回匿名类型-LINQ技术

时间:2021-04-16

  由于垃圾收集器(GC)会清理任何对象,因此,匿名类型是可以从函数返回的。不过在定义范围之外,匿名类型只是一个object的实例而已。不幸的是,返回一个object将会使智能感知技术无效,而且还会破坏匿名类型的强类型特性。虽然你可以通过反射来重新找出该匿名类型的功能,不过,这也将使得这个本来很舒服的东西变得不那么舒服了。下面示例就是一个从函数返回匿名类型的例子,不过在实际应用当中,最好还是只在定义范围内使用匿名类型。

  示例 从方法中返回匿名类型将破坏匿名类型的强类型特性

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ReturnAnonymousTypeFromMethod
{
class Program
{
static void Main(string[] args)
{
var anon=GetAnonymous();
Type t=anon.GetType();
Console.WriteLine(t.GetProperty("Stock").GetValue(anon,null));
Console.ReadLine();
}
public static object GetAnonymous()
{
var stock=new{Stock="MSFT",Price="32.45"};
return stock;
}
}
}

  虽然反射玩起来很爽,不过编写示例所示的那种代码不仅会很慢而且还会很痛苦。(另外,像示例那样的代码还很容易出现bug,因为GetType、GetProperty以及GetValue都可能会返回空值)

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章