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

d7v8vwbk  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(128)

我想作为一个参数传递给一个方法,一个按类型和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
    }
}

字符串

rqqzpn5f

rqqzpn5f1#

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

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

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

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


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

DoSomethingB(groupedDocuments);


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

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


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

相关问题