我需要做这样的事情:
public class carros
{
public int id { get; set; }
public string nome { get; set; }
}
public void listar_carros()
{
List<carros> cars = new List<carros>();
cars.Add(new carros{ id= 1, nome = "Fusca" });
cars.Add(new carros{ id= 2, nome = "Gol" });
cars.Add(new carros{ id= 3, nome = "Fiesta" });
var queryResult = from q in cars
where q.nome.ToLower().Contains("eco")
orderby q.nome
select new { q.nome, q.id };
doSomething(queryResult)
}
我需要将queryResult
变量传递给函数doSomething()
。我尝试使用动态类型List<T>
对象,但没有任何作用
public void doSomething(???? queryResult)
{
foreach (carros ca in queryResult)
{
Response.Write(ca.nome);
Response.Write(" - ");
Response.Write(ca.id);
}
}
答案 0 :(得分:10)
一般来说,在方法之间传递匿名类型几乎总是一个坏主意。
您应该创建一个自定义类型来保存nome
和id
值,然后构造它而不是匿名类型。
在您的情况下,您已经有一个可以工作的课程:carros
。您只需实现查询即可创建它:
var queryResult = from q in cars
where q.nome.ToLower().Contains("eco")
orderby q.nome
select new carros {q.nome, q.id};
您的方法将是:
public void doSomething(IEnumerable<carros> queryResults)
答案 1 :(得分:3)
只是想要传递关于传递匿名类型的信息,虽然有人提到它通过不同类型的坏juju,你可以...如果你真的想(利用动态)
public void Anon()
{
var x = new {foo = "bar"};
AnonReciever(x);
}
public static void AnonReciever(dynamic o)
{
Console.WriteLine(o.foo);
}
这打印bar
没问题。
我不推荐它。最好使用已有的自定义类型对象。
答案 2 :(得分:2)
您不能在当前方法的范围之外传递匿名类型*。使用您的carros
类型:
public void listar_carros()
{
List<carros> Lcars = new List<carros>();
Lcars.Add(new carros(1, "Fusca"));
Lcars.Add(new carros(2, "Gol"));
Lcars.Add(new carros(3, "Fiesta"));
var qry = from q in Lcars
where q.nome.ToLower().Contains("eco")
orderby q.nome
select q;
doSomething(qry);
}
public void doSomething(IEnumerable<carros> qry)
{
foreach (carros ca in qry)
{
Response.Write(ca.nome);
Response.Write(" - ");
Response.Write(ca.id);
//Response.Write(ca);
Response.Write("<br />");
}
}
*您只能将它们作为object
传递,因为您希望以强类型方式使用它们,因此它们几乎无用。
答案 3 :(得分:2)
为什么不将新对象声明为类型carros?
var qry = from q in Lcars
where q.nome.ToLower().Contains("eco")
orderby q.nome
select new carros {q.nome, q.id};
您的参数将是:
IEnumerable{carros}