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

时间:2012-12-20 10:01:04

标签: 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.Age = 23;
}

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

我需要通过匿名类型而不是人来做,我不能使用元组,因为属性名称没有命名,并且每次我需要这样的东西时都不能创建小类,这是一个非常简单的情况,但LINQ的结果与我的例子相似?

3 个答案:

答案 0 :(得分:4)

这种事情怎么样

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

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

        Console.WriteLine(person.Name);

答案 1 :(得分:1)

您可以尝试替换

吗?
Person p = null;

通过

dynamic p = null;

答案 2 :(得分:1)

我建议您创建业务对象,这样就不必使用匿名类型。但是对你的问题进行一些快速修复就是使用反射或将其作为动态类型传递。

编辑:

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