在foreach循环中从枚举中获取值和名称

11 浏览
0 Comments

在foreach循环中从枚举中获取值和名称

我有一个Dictionary类型的字典,其中TableKey是一个枚举类型。

我正在尝试使用从sql查询中获得的DataSet对象的数据来填充字典。

DataSet resultSet = Utils.RunQuery(sqlQuery);

如果(resultSet.Tables.Count > 0)

{

对于(DataRow row in resultSet.Tables[0].Rows)

{

// 使用枚举中的键创建填充的字典

Dictionary dic = new Dictionary();

foreach (TableKey key in Enum.GetValues(typeof(TableKey)))

{

dic.Add(key, "");

}

// 下面的foreach循环将行数据插入字典

foreach (TableKey key in Enum.GetValues(typeof(TableKey)))

{

dic[key] = row[key.ToString()].ToString(); // 这一行不起作用!

}

// 将字典添加到我的字典列表中

latestEntryList.Add(dic);

}

}

我尝试使用上面代码中的for循环来替换这段代码。

dic[TableKey.Barcode] = row["Barcode"].ToString();

dic[TableKey.FullName] = row["FullName"].ToString();

dic[TableKey.Location] = row["Location"].ToString();

dic[TableKey.Notes] = row["Notes"].ToString();

dic[TableKey.Category] = row["Category"].ToString();

dic[TableKey.Timestamp] = row["Timestamp"].ToString();

dic[TableKey.Description] = row["Description"].ToString();

编辑:也许有一种方法可以将两个foreach循环合并为一个。

编辑:我需要获取枚举的字符串名称和键值本身。

public enum TableKey

{

Barcode = 0,

FullName = 1,

Location = 2,

Notes = 3,

Category = 4,

Timestamp = 5,

Description = 6

}

解决方案

DataSet resultSet = Utils.RunQuery(sqlQuery);

if (resultSet.Tables.Count > 0)

{

对于(DataRow row in resultSet.Tables[0].Rows)

{

Dictionary dic = new Dictionary();

foreach (TableKey key in Enum.GetValues(typeof(TableKey)))

{

dic.Add(key, row[key.ToString()].ToString());

}

latestEntryList.Add(dic);

}

}

0
0 Comments

问题的原因是要从枚举中获取值和名称,在foreach循环中实现这个功能。解决方法是通过使用Enum.GetValues方法获取枚举的所有值,并将其添加到Dictionary中,然后通过使用Enum.GetName方法获取枚举的名称,将名称作为键获取对应的值,并将键值对添加到Dictionary中。

以下是解决方法的代码示例:

// 创建一个以枚举为键的Dictionary
Dictionary dic = new Dictionary();
foreach (TableKey key in Enum.GetValues(typeof(TableKey)))
    dic.Add(key, row[Enum.GetName(typeof(Direction), key)].ToString());

另外,通过将枚举强制转换为整数类型,也可以获取枚举的值:

// 创建一个以枚举为键的Dictionary
Dictionary dic = new Dictionary();
foreach (TableKey key in Enum.GetValues(typeof(TableKey)))
    dic.Add(key, row[(int) key].ToString());

甚至可以删除第一个循环,直接使用`dic[somekeythatdoesntexistyet] = somevalue;`来自动添加键值对。

在获取枚举的名称时,使用`Enum.GetName(typeof(Direction), key)`比使用`key.ToString()`更好的选择,因为性能更好。具体的性能对比可以参考stackoverflow中的讨论。

0
0 Comments

在上述代码中,使用了foreach循环遍历枚举类型TableKey的所有值,并将其转换为字符串类型的键,然后将其与相应的行数据进行匹配,并将结果存储在dic字典中。

问题的出现原因是在foreach循环中的代码行key.ToString("G"),其中的ToString("G")是对枚举类型进行格式化转换为字符串的操作。如果没有指定格式化转换的方式,则会使用默认的格式化方式,即'G'。具体的格式化方式可以参考微软官方文档中的说明。

解决方法是根据具体需求来选择合适的格式化方式。在这种情况下,如果不需要特定的格式化方式,可以直接使用key.ToString()来将枚举值转换为字符串。如果需要使用特定的格式化方式,可以根据需求选择合适的格式化方式作为参数传递给ToString方法。

,问题的原因是对枚举类型进行格式化转换为字符串时使用了默认的格式化方式,解决方法是根据具体需求选择合适的格式化方式。

0
0 Comments

问题原因:

在这段代码中,使用了一个枚举类型的变量key作为字典的键,然后从一个包含键值对的行中获取相应的值,并将其转换为字符串后存入字典中。然而,这段代码没有提供获取枚举变量名的方法,因此无法将枚举变量名与相应的值一起存入字典中。

解决方法:

要解决这个问题,可以通过使用枚举的ToString方法来获取枚举变量的名称,并将其与相应的值一起存入字典中。可以通过以下方式修改代码:

dic[key.ToString()] = row[key.ToString()].ToString();

这样就能够将枚举变量的名称和相应的值一起存入字典中了。

0