asp.net 如何将分组列表作为参数传递给C#中的方法?

d7v8vwbk  于 2024-01-09  发布在  .NET
关注(0)|答案(1)|浏览(146)

我想作为一个参数传递给一个方法,一个按类型和id分组的列表,如何正确地将其作为一个参数传递并在方法中接收它?我使用的是Visual Studio 2022,groupedDocuments的类型为List<Ideal <$'a,Document>>

  1. public class Document
  2. {
  3. public int Id;
  4. public string DocumentType;
  5. public string Description;
  6. }
  7. public class Something()
  8. {
  9. public void DoSomethingA(){
  10. List<Document> Documents = new List<Document>();
  11. Documents.Add(new Document { Id = 1, DocumentType = "TypeA", Description =
  12. "DescriptionA" });
  13. Documents.Add(new Document { Id = 2, DocumentType = "TypeB", Description =
  14. "DescriptionB" });
  15. Documents.Add(new Document { Id = 3, DocumentType = "TypeC", Description =
  16. "DescriptionC" });
  17. var groupedDocuments = Documents.GroupBy(item => new { item.DocumentType, item.Id })
  18. .ToList();
  19. DoSomethingB(groupedDocuments) // I want to pass groupedDocuments here
  20. }
  21. public void DoSomethingB() // how to define this grouped list here in argument?
  22. {
  23. // ...Something
  24. }
  25. }

字符串

rqqzpn5f

rqqzpn5f1#

问题是你使用了一个匿名类型new { item.DocumentType, item.Id }作为键。这个类型没有名字,不能在参数列表中指定。使用元组类型代替(item.DocumentType, item.Id)

  1. var groupedDocuments = Documents
  2. .GroupBy(item => (item.DocumentType, item.Id))
  3. .ToList();

字符串
现在,您可以将该方法声明为

  1. void DoSomethingB(List<IGrouping<(string DocumentType, int Id), Document>> docs)
  2. {
  3. }


请注意,如果您删除DoSomethingB方法并尝试使用以下命令调用它:

  1. DoSomethingB(groupedDocuments);


.调用将以红色波浪线显示,但您可以在Visual Studio中键入Ctrl-.(Control + dot)以获取可能的重构列表。您也可以将鼠标悬停在错误代码上,然后会出现一个智能标记。这两种方式都可以让您自动生成方法,结果是:

  1. private static void DoSomethingB(List<IGrouping<(string DocumentType, int Id), Document>> groupedDocuments)
  2. {
  3. // TODO: Add your implementation
  4. }


在查询中可能不需要调用.ToList()。如果你不这样做,你会得到类型IEnumerable<IGrouping<(string DocumentType, int Id), Document>>。根据DoSomethingB的操作,这将为你节省保存不必要的集合分配。
标签:IEnumerable vs List - What to Use? How do they work?

展开查看全部

相关问题