[英]Add unknown parameter to a Func inside a generic method
我在網上查看了很多資源,但我認為這是不可能的,或者我從錯誤的角度接近它。
我正在從子表生成一個 id 列表,並確定父表中的外鍵 id 是否包含在子 id 列表中。 例如 j =>.ids.Contains(j.InvestorId)。 下面的代碼不會編譯,因為 whereFilter 不能帶參數,但是你可以看到我想要的效果。
希望有一種方法可以代替預先獲取 id 並將附加參數傳遞給 whereFilter。
public List<int> ValidateReferentialIntegrity<TChild, TParent>(string childFilePath,
string parentFilePath,
Func<TParent, int, bool> whereFilter,
Func<TParent, int> selector)
{
var childList = ReadCsvFile<TChild>(typeof(TChild).Name, childFilePath);
var parentList = ReadCsvFile<TParent>(typeof(TParent).Name, parentFilePath);
var ids = childList.Select(s => (int)s.GetId()).ToList();
var unidentifiableIds = parentList.Where(whereFilter(ids))
.Select(selector).ToList();
return unidentifiableIds;
}
public List<int> ValidateReferentialIntegrity<TChild, TParent>(string childFilePath,
string parentFilePath,
Func<TParent, IList<int>, bool> whereFilter, // <- change #1 is here, IList<int>
Func<TParent, int> selector)
{
var childList = ReadCsvFile<TChild>(typeof(TChild).Name, childFilePath);
var parentList = ReadCsvFile<TParent>(typeof(TParent).Name, parentFilePath);
var ids = childList.Select(s => (int)s.GetId()).ToList();
var unidentifiableIds = parentList
.Where(p => whereFilter(p, ids)) // <- change #2 is here, pass object to whereFilter
.Select(selector)
.ToList();
return unidentifiableIds;
}
並這樣稱呼它:
var list = ValidateReferentialIntegrity<TChild, TParent>(
"file1.csv",
"file2.csv",
(TParent parent, IList<int> childIds) => childIds.Contains(parent.InvestorId),
parent => parent.InvestorId);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.