【发布时间】:2021-12-12 00:52:33
【问题描述】:
您已经创建了这个从 excel 读取的方法:
public static Dictionary<int, TreeItemModel> ExcelReader(FileUploadModel upload,
Func<Dictionary<int, string>, Row, object, Action> func)
{
try
{
var dict = new Dictionary<int, TreeItemModel>();
using (var doc = SpreadsheetDocument.Open(upload.Stream, false))
{
var workbookPart = doc.WorkbookPart;
var worksheetPart = workbookPart.WorksheetParts.First();
var sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
var stringTable = LoadSharedStringDictionarySax(workbookPart.SharedStringTablePart);
foreach (var r in sheetData.Elements<Row>())
{
func(stringTable, r, dict);
}
}
upload.Stream.Close();
upload.UploadCompletion = 100;
return dict;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
throw;
}
}
我在其他类中这样调用这个方法:
private async Task OnFilesDropped(FileUploadModel upload)
{
var dict = new Dictionary<int, TreeItemModel>();
OfficeHelper.ExcelExtension.ExcelReader(upload, ExcelToProjTree);
}
private static Action ExcelToProjTree(Dictionary<int, string> stringTable, Row r, Dictionary<int, TreeItemModel> dict)
{
//Some stuff
}
stringTable 和 r 是在调用方法时设置的,但是我想在调用 ExcelReader 时设置 dict
像这样:
private async Task OnFilesDropped(FileUploadModel upload)
{
var dict = new Dictionary<int, TreeItemModel>();
OfficeHelper.ExcelExtension.ExcelReader(upload, () => ExcelToProjTree(dict));
}
有可能吗?如果是,怎么做?
【问题讨论】:
-
将
func的参数类型改为Func<Dictionary<int, string>, Row, Action>,然后在调用处传递(stringTable, r) => ExcelToProjTree(stringTable, r, dict)。 -
@MathiasR.Jessen 在我称之为 foreach 的地方我应该放什么?
-
func(stringTable, r);(因为您已经在 lambda 中提供了dict参数) -
@MathiasR.Jessen 我会试试的 ;)
标签: c# function parameters func