我想作为一个参数传递给一个方法,一个按类型和id分组的列表,如何正确地将其作为一个参数传递并在方法中接收它?我使用的是Visual Studio 2022,groupedDocuments的类型为List<Ideal <$'a,Document>>
public class Document
{
public int Id;
public string DocumentType;
public string Description;
}
public class Something()
{
public void DoSomethingA(){
List<Document> Documents = new List<Document>();
Documents.Add(new Document { Id = 1, DocumentType = "TypeA", Description =
"DescriptionA" });
Documents.Add(new Document { Id = 2, DocumentType = "TypeB", Description =
"DescriptionB" });
Documents.Add(new Document { Id = 3, DocumentType = "TypeC", Description =
"DescriptionC" });
var groupedDocuments = Documents.GroupBy(item => new { item.DocumentType, item.Id })
.ToList();
DoSomethingB(groupedDocuments) // I want to pass groupedDocuments here
}
public void DoSomethingB() // how to define this grouped list here in argument?
{
// ...Something
}
}
字符串
1条答案
按热度按时间rqqzpn5f1#
问题是你使用了一个匿名类型
new { item.DocumentType, item.Id }
作为键。这个类型没有名字,不能在参数列表中指定。使用元组类型代替(item.DocumentType, item.Id)
:字符串
现在,您可以将该方法声明为
型
请注意,如果您删除
DoSomethingB
方法并尝试使用以下命令调用它:型
.调用将以红色波浪线显示,但您可以在Visual Studio中键入Ctrl-.(Control + dot)以获取可能的重构列表。您也可以将鼠标悬停在错误代码上,然后会出现一个智能标记。这两种方式都可以让您自动生成方法,结果是:
型
在查询中可能不需要调用
.ToList()
。如果你不这样做,你会得到类型IEnumerable<IGrouping<(string DocumentType, int Id), Document>>
。根据DoSomethingB
的操作,这将为你节省保存不必要的集合分配。标签:IEnumerable vs List - What to Use? How do they work?