C# 使用相同的属性名称和类型多次分配匿名类型

C# 使用相同的属性名称和类型多次分配匿名类型,c#,.net,linq,initialization,anonymous-types,C#,.net,Linq,Initialization,Anonymous Types,我有一些代码块,需要使用块外要使用的相同对象,我可以使用强类型,例如: Person p = null; if(cond1) { p = new Person(); p.Name = "Name1"; p.Age = 25; } else if (cond2) { p = Employees.Select(c=>new Person() {Name = c.FirstName + " " +c.LastName }).First(); p.A

我有一些代码块,需要使用块外要使用的相同对象,我可以使用强类型,例如:

Person p = null;
if(cond1)
{
    p = new Person();
    p.Name = "Name1";
    p.Age = 25;
}
else if (cond2)
{    
    p = Employees.Select(c=>new Person() {Name = c.FirstName + " " +c.LastName }).First();
    p.Age = 23;
}

if(p != null)
{
    Console.Write(p.Name);
}

我需要通过匿名类型而不是person来实现这一点,我不能使用元组,因为属性名没有命名,并且不能在每次需要时创建微小的类,这是一个非常简单的情况,但是LINQ会产生类似于我的示例的块吗?

你能尝试替换吗

Person p = null;


你能试着换一个吗

Person p = null;


我建议您创建业务对象,这样就不必使用匿名类型。但解决问题的两个快速方法是使用反射或将其作为动态类型传递

编辑:


哦,您是否只是为了限制类型上的属性而创建新的子类型,这样就不必指定Console.Write()或其他任何函数可以使用的属性?我假设您查询的数据在这些函数之外可用,如果它是强类型的,那么您不需要创建匿名类型,只需要使用这些类型。。。但您必须在Console.Write()行中指定要打印的属性,这是我的建议。

我建议您创建业务对象,这样您就不必使用匿名类型。但解决问题的两个快速方法是使用反射或将其作为动态类型传递

编辑:


哦,您是否只是为了限制类型上的属性而创建新的子类型,这样就不必指定Console.Write()或其他任何函数可以使用的属性?我假设您查询的数据在这些函数之外可用,如果它是强类型的,那么您不需要创建匿名类型,只需要使用这些类型。。。但您必须在Console.Write()行中指定要打印的属性,这是我的建议。

这类事情怎么样

        var person = new { Name = "" }; ;

        if (cond1)
        {
            person  = new { Name = "Bob" };
        }
        else
        {
            person  = new { Name = "John" };
        }

        Console.WriteLine(person.Name);

这种东西怎么样

        var person = new { Name = "" }; ;

        if (cond1)
        {
            person  = new { Name = "Bob" };
        }
        else
        {
            person  = new { Name = "John" };
        }

        Console.WriteLine(person.Name);

匿名类型只能在代码块内部使用,例如,它们不能用作方法参数或返回值。编写类不需要花费任何费用,如果在业务逻辑中有意义,那么创建它们就可以了。你说你“不能”每次需要这样的东西时都创建小类。为什么会这样?@SWeko我需要的是同一种方法,而不是多种方法methods@PatrikHägne我的意思是,在一个方法中创建几十个两到三个属性类会让人不安!匿名类型只能在代码块内部使用,例如,它们不能用作方法参数或返回值。编写类不需要花费任何费用,如果在业务逻辑中有意义,那么创建它们就可以了。你说你“不能”每次需要这样的东西时都创建小类。为什么会这样?@SWeko我需要的是同一种方法,而不是多种方法methods@PatrikHägne我的意思是,在一个方法中创建几十个两到三个属性类会让人不安!我需要一个快速的方法,因为这种类型不会在区块外使用我需要一个快速的方法,因为这种类型不会在区块外使用这是一个很好的技巧,感谢此功能:如果程序集中的两个或多个匿名对象初始值设定项指定了一个顺序相同、名称和类型相同的属性序列,编译器会将这些对象视为同一类型的实例。这是一个很好的技巧,得益于此功能:如果程序集中的两个或多个匿名对象初始值设定项指定了顺序相同且名称和类型相同的属性序列,则编译器会将这些对象视为相同类型的实例。”