我有一些代码块,并且需要在块外使用相同的对象,我可以使用强类型,如:
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结果块类似于我的例子呢?
这个怎么样
var person = new { Name = "" }; ;
if (cond1)
{
person = new { Name = "Bob" };
}
else
{
person = new { Name = "John" };
}
Console.WriteLine(person.Name);
能否试着替换
Person p = null;
dynamic p = null;
我建议您创建业务对象,这样您就不必使用匿名类型。但是,对您的问题的几个快速修复将是使用反射或将其作为动态类型传递。
编辑:哦,你只是为了限制类型上的属性而创建新的子类型,这样你就不必指定你想要Console.Write()(或任何其他函数)可以使用的属性吗?我假设你要查询的数据在这些函数之外是可用的,如果它是强类型的,那么你不需要创建匿名类型,只需要使用这些类型…但是您必须在Console.Write()行中指定要打印的属性,这是我建议的。