C#匿名类型列表作为参数

时间:2012-11-14 08:34:15

标签: c#

有一种方法可以声明一个匿名类型集合作为参数的方法吗?

例如像伪语法这样的东西:

private void dosomething ( List<class with { string Name, string Lastname, int Age }> persons) {
... 
}

避免创建单个使用类。

更新 我想要的是避免我将仅用于将数据传递给此方法的类的定义。

3 个答案:

答案 0 :(得分:2)

<强>更新

你的问题有点令人困惑。

根据你问题的第一部分,我认为你需要一个通用的方法。

private void dosomething<T>(List<T> items) {
... 
}

但在查看您编写的代码后,您只需要一个界面IPerson

public interface IPerson
{
   Name { get; set; }
   LastName { get; set; }
   Age { get; set; }
}

private void dosomething(List<IPerson> persons) {
    ... 
}

答案 1 :(得分:1)

对于此匿名类型,您应该make a class,因为匿名类型不能以强大的方式传递到单个方法的范围之外,因为无法在方法范围之外表示它。但如果你真的不想,你可以使用动力学:

public void DoSomething (IEnumerable<dynamic> list)
{
    foreach (dynamic item in list)
    {
        string name = item.Name;
        string lastName = item.LastName;
        int age = item.Age;
    }
}

请注意,这不是强类型的,因此,例如,如果名称更改为EmployeeName,则在运行时之前您不会知道存在问题。

答案 2 :(得分:0)

您可以使用动态关键字执行此操作,但会丢失强类型属性。

private void doSomething (List<dynamic> persons)
{
var name = persons.FirstOrDefault().Name;
}