在foreach循环中从枚举中获取值和名称
在foreach循环中从枚举中获取值和名称
我有一个Dictionary
我正在尝试使用从sql查询中获得的DataSet对象的数据来填充字典。
DataSet resultSet = Utils.RunQuery(sqlQuery);
如果(resultSet.Tables.Count > 0)
{
对于(DataRow row in resultSet.Tables[0].Rows)
{
// 使用枚举中的键创建填充的字典
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
foreach (TableKey key in Enum.GetValues(typeof(TableKey)))
{
dic.Add(key, row[key.ToString()].ToString());
}
latestEntryList.Add(dic);
}
}
问题的原因是要从枚举中获取值和名称,在foreach循环中实现这个功能。解决方法是通过使用Enum.GetValues方法获取枚举的所有值,并将其添加到Dictionary中,然后通过使用Enum.GetName方法获取枚举的名称,将名称作为键获取对应的值,并将键值对添加到Dictionary中。
以下是解决方法的代码示例:
// 创建一个以枚举为键的Dictionary Dictionarydic = new Dictionary (); foreach (TableKey key in Enum.GetValues(typeof(TableKey))) dic.Add(key, row[Enum.GetName(typeof(Direction), key)].ToString());
另外,通过将枚举强制转换为整数类型,也可以获取枚举的值:
// 创建一个以枚举为键的Dictionary Dictionarydic = 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中的讨论。
在上述代码中,使用了foreach循环遍历枚举类型TableKey的所有值,并将其转换为字符串类型的键,然后将其与相应的行数据进行匹配,并将结果存储在dic字典中。
问题的出现原因是在foreach循环中的代码行key.ToString("G"),其中的ToString("G")是对枚举类型进行格式化转换为字符串的操作。如果没有指定格式化转换的方式,则会使用默认的格式化方式,即'G'。具体的格式化方式可以参考微软官方文档中的说明。
解决方法是根据具体需求来选择合适的格式化方式。在这种情况下,如果不需要特定的格式化方式,可以直接使用key.ToString()来将枚举值转换为字符串。如果需要使用特定的格式化方式,可以根据需求选择合适的格式化方式作为参数传递给ToString方法。
,问题的原因是对枚举类型进行格式化转换为字符串时使用了默认的格式化方式,解决方法是根据具体需求选择合适的格式化方式。