包含在 C# 中的字典中

Str*_*der 2 c# dictionary

我必须确保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个键。是否有任何速记代码可以检查?

Rio*_*ams 6

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)