我必须确保excel中只有某些单元格,而不是更多或更少。甚至这些标题单元格文本也是预先指定的。应用程序中也不允许使用不同的单元格文本。
然后根据标题,我必须将数据放入列表中。
我正在做的将我的 excel 转换为字典是这样的:
var ws = excel.Workbook.Worksheets["Sheet1"];
int headerCol = 2;
Dictionary<string, int> map = Enumerable
.Range(ws.Dimension.Start.Column, 24 - ws.Dimension.Start.Column + 1)
.ToDictionary(col => ws.Cells[headerCol, col].Value.ToString().Trim(), col => col);
for (int rw = 3; rw <= ws.Dimension.End.Row; rw++)
{
if (!ws.Cells[rw, 1, rw, 24].All(c => c.Value == null))
{
lgl.GroupMembershipUploadInputList.Add(new GroupMembershipUploadInput()
{
cnst_mstr_id = (ws.Cells[rw, map["Master Id"]].Value ?? (Object)"").ToString(),
cnst_prefix_nm = (ws.Cells[rw, map["Prefix"]].Value ?? (Object)"").ToString(),
Run Code Online (Sandbox Code Playgroud)
但是现在我如何确保字典映射只包含这些指定的字符串键,而没有任何不同,例如 Master Id 和 Prefix - 只有这两个,也就是这两个。
实际上有24个键。是否有任何速记代码可以检查?
Dictionary 类包含一个被调用的方法ContainsKey(),该方法可用于检查字典中是否存在某个键:
if(map.ContainsKey(key))
{
// Do something
}
Run Code Online (Sandbox Code Playgroud)
如果您需要检查多个键是否存在,您可以将需要检查的键存储在一个集合中,然后使用一些 LINQ 对其进行评估:
// Keys to check for
var keys = new []{ "Master_Id", "Prefix" };
// Check if all of these keys exist
if(map.Keys.All(k => keys.Contains(k)) && map.Keys.Count() == keys.Count())
{
// All of the keys are present in your collection
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以通过该Intersect()方法检查键的交集并确保它们也匹配:
if(map.Keys.Intersect(keys).Count() == keys.Count())
{
// Exactly every key is present
}
Run Code Online (Sandbox Code Playgroud)