C# 如何编写C方法返回列表?

C# 如何编写C方法返回列表?,c#,asp.net,C#,Asp.net,这是我上一个问题列表中的一个正在进行的练习 我想写一个返回列表的方法。在我下面的示例中,intellisence无法识别返回查询 你能告诉我我做错了什么吗 var关键字与LINQ一起引入是有原因的。这是因为LINQ查询通常会返回一个匿名类型—一个作为查询的一部分临时创建的类型,它不是显式定义的类型,因此,var允许您指定该类型的变量 这就是这里发生的事情。LINQ查询创建一个匿名类型的集合,该集合有两个字段,即“代码”和“名称”,这两个字段是在select语句中临时创建的: 选择新的{l.cod

这是我上一个问题列表中的一个正在进行的练习

我想写一个返回列表的方法。在我下面的示例中,intellisence无法识别返回查询

你能告诉我我做错了什么吗

var关键字与LINQ一起引入是有原因的。这是因为LINQ查询通常会返回一个匿名类型—一个作为查询的一部分临时创建的类型,它不是显式定义的类型,因此,var允许您指定该类型的变量

这就是这里发生的事情。LINQ查询创建一个匿名类型的集合,该集合有两个字段,即“代码”和“名称”,这两个字段是在select语句中临时创建的: 选择新的{l.code,l.name}。因此,您的查询变量不是列表,而是列表。匿名类型在结构上与CodeName相同这一事实并不重要,因为C是一种严格类型化语言,并且希望类型与声明的类型相同

您可以通过在查询中创建新的代码名(而不是匿名类型)来轻松修复它,并且对象初始值设定项语法甚至使其变得简单:

var query = (from l in lst
            join d in dt.AsEnumerable() on l.code equals d.Field<string>("code")
            select new CodeName { code = l.code, name = l.name}).ToList();

您的查询是一个列表,但不是一个列表-您可以这样修改新部件:

            var query = (from l in lst
                     join d in dt.AsEnumerable() on l.code equals d.Field<string>("code")
                     select new CodeName { code = l.code, name = l.name }).ToList();

您正在选择新的{l.code,l.name}-这不是代码名。您好,Avner,感谢您解释问题的根本原因-非常感谢。您好,Avner,感谢您解释问题的根本原因-非常感谢。现在,该方法返回List。我想从静态void Mainstring[]args{List ls=CodeNameList;}这样的主方法调用它。intellisence发出警告消息,表示非静态字段、方法或属性程序需要对象引用。CodeNameList您能提供建议吗?这是一个单独的问题,应该单独询问。但是,我要警告您,这是静态/实例方法的一个非常基本的问题,我建议您在询问之前先阅读一下
            var query = (from l in lst
                     join d in dt.AsEnumerable() on l.code equals d.Field<string>("code")
                     select new CodeName { code = l.code, name = l.name }).ToList();