Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从对象类型获取匿名类型_C#_Anonymous Types - Fatal编程技术网

C# 从对象类型获取匿名类型

C# 从对象类型获取匿名类型,c#,anonymous-types,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 ob

对于下面显示的代码

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"};
    }
}
如何从type
对象
中取回匿名类型

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

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

它的

你可以让它充满活力

dynamic AnonymousInside= t.GetAnonymousType();
虽然您应该使用类,但应该使用struct


如果仍要使用匿名类型

这在以下文件中提到:

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


因此,通过对象访问它的唯一方法是使用
反射
动态

您可以使它成为动态的

dynamic AnonymousInside= t.GetAnonymousType();
虽然您应该使用类,但应该使用struct


如果仍要使用匿名类型

这在以下文件中提到:

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


因此,通过对象访问它的唯一方法是使用
反射
动态
如果您不想使用
动态
,您可以尝试类似的方法

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"};
    }
}
使用系统;
公开课考试
{
公共静态void Main()
{
var AnonymousInside=GetAnonymousTyped(GetAnonymousObject(),new{Key=”“,Value=”“});
Console.Write(AnonymousInside.Key);//一切正常
}
公共静态T GetAnonymousTyped(对象o,T_u2;)
{
返回(T)o;
}
公共静态对象GetAnonymousObject()
{
返回新的{Key=“KeyName”,Value=“ValueName”};
}
}

如果您不想使用
动态
您可以尝试以下方法

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"};
    }
}
使用系统;
公开课考试
{
公共静态void Main()
{
var AnonymousInside=GetAnonymousTyped(GetAnonymousObject(),new{Key=”“,Value=”“});
Console.Write(AnonymousInside.Key);//一切正常
}
公共静态T GetAnonymousTyped(对象o,T_u2;)
{
返回(T)o;
}
公共静态对象GetAnonymousObject()
{
返回新的{Key=“KeyName”,Value=“ValueName”};
}
}


via Reflection probablyinside TextBoxFor的副本-已使用reflection@Grundy实际上,在方法中不允许匿名类型作为返回类型的原因可能是什么。我认为可以从方法的返回类型推断出类型。rite?@SubinJacob匿名类型仅在编译时获取其名称,因此您无法在via Reflection Probablyinsed TextBoxFor-used的代码时间副本中引用它reflection@Grundy实际上,在方法中不允许匿名类型作为返回类型的原因可能是什么。我认为可以从方法的返回类型推断出类型。rite?@SubinJacob匿名类型仅在编译时获取其名称,因此您无法在代码时引用它,但为什么需要动态类型?匿名类型已在编译时本身中定义。rite?没有必要为此使用
对象
类型。我只想传递匿名数据.@ SujInAcOB在文档中提到:<代码>如果您想将它们传递到方法边界之外,考虑使用普通的命名结构或类而不是匿名类型。< /代码> @ SujICANOB,这将更清楚:<代码>编译器为每个匿名类型提供一个名称,尽管您的应用程序无法访问它我不想使用反射或动态,因为不会有任何编译时检查。但是我希望会有一个,因为类型是在编译时定义的。如果可能的话,我可以在需要返回多个类型的场景中使用它。但是为什么需要动态类型呢?匿名类型已在编译时本身中定义。rite?没有必要为此使用
对象
类型。我只想传递匿名数据.@ SujInAcOB在文档中提到:<代码>如果您想将它们传递到方法边界之外,考虑使用普通的命名结构或类而不是匿名类型。< /代码> @ SujICANOB,这将更清楚:<代码>编译器为每个匿名类型提供一个名称,尽管您的应用程序无法访问它我不想使用反射或动态,因为不会有任何编译时检查。但是我希望会有一个,因为类型是在编译时定义的。如果可能的话,我可以在需要返回多个类型的场景中使用它。意思是,我必须定义两次类型?@SubinJacob是,第一次用于返回,第二次用于转换结果意味着,我必须定义两次类型?@SubinJacob是,第一次用于返回,第二次用于转换结果