1

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

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 会导致类似于我的示例的块?

4

3 回答 3

4

这种事情怎么样

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

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

        Console.WriteLine(person.Name);
于 2012-12-20T10:05:55.317 回答
1

你可以尝试更换

Person p = null;

经过

dynamic p = null;
于 2012-12-20T10:04:15.757 回答
1

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

编辑:

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

于 2012-12-20T10:05:21.747 回答