从对象类型获取匿名类型

时间:2013-11-07 05:51:01

标签: c# anonymous-types

对于下面显示的代码

using System;

public class Test
{
    public static void Main()
    {
        Test t = new Test();
        object AnonymousInside= t.GetAnonymousType();
        Console.Write(AnonymousInside.Key);//Error on compilation
    }

    public object GetAnonymousType()
    {
        return new {Key="KeyName",Value="ValueName"};
    }
}

如何从object类型中取回匿名类型?

如果那不可能,那么这段代码是如何工作的?

@Html.TextBoxFor(model => model.ConfirmPassword, new { maxlength = 35, type = "password", @class="textArea  margindrop",placeholder="Confirm password"})

Documentation

2 个答案:

答案 0 :(得分:3)

你可以让它变得动态

dynamic AnonymousInside= t.GetAnonymousType();

虽然你应该使用一个类,而不是


如果您仍想使用匿名类型

docs中提及:

  

编译器为每个匿名类型提供一个名称,尽管你的名字也是   应用程序无法访问它。

因此,通过对象访问它的唯一方法是使用reflectiondynamic

答案 1 :(得分:2)

如果您不想使用dynamic,可以尝试使用此类

using System;

public class Test
{
    public static void Main()
    {
        var AnonymousInside = GetAnonymousTyped(GetAnonymousObject(), new {Key="",Value=""});
        Console.Write(AnonymousInside.Key);//All Ok
    }

    public static T GetAnonymousTyped<T>(object o, T _)
    {
        return (T)o;
    }

    public static object GetAnonymousObject()
    {
         return new {Key="KeyName",Value="ValueName"};
    }
}