返回匿名类型。






4.19/5 (19投票s)
返回匿名类型。
在本文中,我将讨论如何返回匿名类型以及如何在代码中处理它。以下是关于匿名类型的一些事实:
关于匿名类型的快速了解
正如上述事实所述,您无法直接从方法返回匿名类型,如果想返回,则需要将其转换为对象。
现在,在下面的文章中,我将以对象的形式返回匿名类型,并展示三种不同的处理方法。
注意:由于我们正在使用动态类型,因此没有 IntelliSense 支持。还需要记住属性名称和类型。
方法 2:通过创建相同的匿名类型处理
方法 3:使用反射处理
查看完整的源代码以测试我们讨论的所有技术
结论
因此,现在借助上述技术,可以从方法返回匿名类型。
希望大家喜欢。请评分并留下您的评论。
关于匿名类型的快速了解
- 匿名类型是源自system.objects的引用类型。
- 匿名类型的属性是只读的。
- 如果两个匿名类型具有相同的属性和相同的顺序,则编译器将它们视为相同类型。但如果它们都在同一个程序集中。
- 匿名类型具有方法作用域。如果您想从方法返回匿名类型,则必须将其转换为对象类型。但这并不是一个好的做法。
正如上述事实所述,您无法直接从方法返回匿名类型,如果想返回,则需要将其转换为对象。
现在,在下面的文章中,我将以对象的形式返回匿名类型,并展示三种不同的处理方法。
- 方法 1:使用动态类型处理
- 方法 2:通过创建相同的匿名类型处理
- 方法 3:使用反射处理
object AnonymousReturn() { return new { Name = "Pranay", EmailID = "pranayamr@gmail.com" }; }方法 1:使用动态类型处理
dynamic newtype= AnonymousReturn(); Console.WriteLine(newtype.Name + " " + newtype.EmailID);如上例所示,第一行代码调用返回匿名类型作为对象的方法,并将返回值赋给动态类型。第二行代码只是打印匿名类型的属性值。
注意:由于我们正在使用动态类型,因此没有 IntelliSense 支持。还需要记住属性名称和类型。
方法 2:通过创建相同的匿名类型处理
object o = AnonymousReturn(); var obj = Cast(o, new { Name = "", EmailID = "" }); Console.WriteLine(obj.Name + " " + obj.EmailID);在这种方法中,匿名类型的返回值被赋给对象。下一行代码将对象转换为相同的匿名类型。为了完成此任务,以下方法执行对象的转换。
T Cast<T>(object obj, T type) { return (T)obj; }这完成了类型转换并提供了智能支持。
方法 3:使用反射处理
object refobj = AnonymousReturn(); Type type = refobj.GetType(); PropertyInfo[] fields = type.GetProperties(); foreach (var field in fields) { string name = field.Name; var temp = field.GetValue(obj, null); Console.WriteLine(name + " " + temp); }这种方法利用了 .net 的反射特性。第一行代码调用该方法并将返回值赋给 refobj。第二行代码获取对象的类型,然后下一行代码获取匿名类型的属性并打印其值。
查看完整的源代码以测试我们讨论的所有技术
using System;p using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace Test { class Program { static void Main(string[] args) { Program p = new Program(); dynamic newtype= p.AnonymousReturn(); Console.WriteLine("With Dynamic Type"); Console.WriteLine(newtype.Name + " " + newtype.EmailID); Console.WriteLine(); Console.WriteLine("With Creation of same anonymous type"); object o = p.AnonymousReturn(); var obj = p.Cast(o, new { Name = "", EmailID = "" }); Console.WriteLine(obj.Name + " " + obj.EmailID); Console.WriteLine(); Console.WriteLine("With Reflection"); object refobj = p.AnonymousReturn(); Type type = refobj.GetType(); PropertyInfo[] fields = type.GetProperties(); foreach (var field in fields) { string name = field.Name; var temp = field.GetValue(obj, null); Console.WriteLine(name + " " + temp); } Console.ReadLine(); } object AnonymousReturn() { return new { Name = "Pranay", EmailID = "pranayamr@gmail.com" }; } T Cast<T>(object obj, T type) { return (T)obj; } public static void Write() { Program p = new Program(); object obj = p.AnonymousReturn(); } } }输出
结论
因此,现在借助上述技术,可以从方法返回匿名类型。
希望大家喜欢。请评分并留下您的评论。