将匿名类型的对象作为参数传递给方法
本文关键字:参数传递 方法 对象 类型 | 更新日期: 2023-09-27 18:28:19
我需要做这样的事情:
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);
}
}
通常,在方法之间传递匿名类型几乎总是一个坏主意。
您应该创建一个自定义类型来保存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)
我只是想谈谈传递匿名类型的问题,虽然有人提到传递匿名类型是不好的,但你可以。。。如果你真的想(利用动态)
public void Anon()
{
var x = new {foo = "bar"};
AnonReciever(x);
}
public static void AnonReciever(dynamic o)
{
Console.WriteLine(o.foo);
}
这打印bar
没有问题。
不过我不推荐它。最好使用您已经拥有的自定义类型的对象。
为什么不将新对象声明为类型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}
不能在当前方法的范围之外传递匿名类型*。使用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
传递,这基本上是无用的,因为您希望以强类型的方式使用它们。