User Id :    Password :      New Member   Forgot Password  
 
Return Anonymous type
Description In this post I am going to discuss about returning the anonymous type and how to handle in code. Following is list of fact about anonymous type.   No. of Views     1887
  Rating     0
Author Pranay Rana   Posted On     11 Oct 2012
Tags C#,C# 4.0,C# : How To    

Sample Code   Download Code

Quick facts about Anonymous type

 

  • Anonymous types are reference type derived form system.objects.
  • Properties of the Anonymous type is read only.
  • If two Anonymous type has same properties and same order than compiler treats its as same type. But if both are in one assembly.
  • Anonymous type has method scope. If you want to return Anonymous type form the method than you have to convert it in object type. But is not good practice.

 

You can read more on blog about this: Anonymous types


As in about facts you cannot return anonymous type from the method , if you want to return you need to cast it in object.
 

Now in following post I am going to do same return the anonymous type as object and going to show three different way to handle it.

 

  • Way 1: Handle using Dynamic type 
  • Way 2: Handle by creating same anonymous type 
  • Way 3: Handle using Reflection

 

To Understand each way I created following method which returns anonymous type

 

object AnonymousReturn()
{
     return new { Name = "Pranay", EmailID = "pranayamr@gmail.com" };
}

 

Way 1: Handle using Dynamic type

 

dynamic newtype= AnonymousReturn();
Console.WriteLine(newtype.Name + "  " + newtype.EmailID);

 

As you see in above example first line of code calling method which is returning anonymous type as object and assign the return value to dynamic type. Second line of code just printing the property value of anonymous type.
Note : No intelligence support as we are using dynamic type. And need to remember the property name and type also.



Way 2: Handle by creating same anonymous type

 

object o = AnonymousReturn();
var obj = Cast(o, new { Name = "", EmailID = "" });
Console.WriteLine(obj.Name + "  " + obj.EmailID);

 

In this way return value of the anonymous type is get assigned to object. Next line of the code cast object to the same anonymous type. To accomplish this task following method does casting of object.

 

T Cast(object obj, T type) { return (T)obj; } 

 

This done song type conversation and provide intelligence support.

 

Way 3: Handle using Reflection

 

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);
}

 

This way making use of reflection feature of .net. First line of code call the method and assign return value to refobj. Second line of code get the Type of the object and than following line of code get the property of anonymous type and print value of it.



Check out full Source code of to test all technique we discuss

 

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(object obj, T type) { return (T)obj; }                    public static void Write()                 {        Program p = new Program();        object obj = p.AnonymousReturn();        }               }         }

 

About Author

About Author Hey, I am Pranay Rana, working as a Senior Software engineer. Web development in Asp.Net with C# and MS sql server are the experience tools that I have had for the past 5 years now.
For me def. of programming is : Programming is something that you do once and that get used by multiple for many years
You can visit me on my blog - http://pranayamr.blogspot.com/
Pranay Rana
No Photo
 
Country India
Company GMind Solutions
Home Page http://pranayamr.blogspot.com/

Rate this article

Rating options from poor, fair, good, very good to excelent.  
 

Comments

   
Write your comment here.
Comment
Verification Code