我已经看过这个问题,虽然它解决了他们手头的问题,但它并没有跳到我身上,我的问题仍然存在。我有以下代码,其中一个字符串被拆分为其预期的键/值对,但通常会将其转储到字典中<string, string>。我需要该值采用枚举形式,如下所示:public enum SortDirection
{
asc = 0,
desc
}我已将字典 orderBy 声明如下:var orderedBy = new Dictionary<string, SortDirection>();keyValuePair.Value 是字符串中一个接一个的一组键值对。客户端编号 asc,客户端姓氏 asc分割它并创建字典的代码如下。 orderedBy = keyValuePair.Value.Split(',')
.Select(x => x.Split(' '))
.ToDictionary(x => x[0], (x => Enum.TryParse(x[1], false, out SortDirection direction)));在任何时候,值都不会x[1]是“asc”或“desc”以外的任何值,但是我似乎无法将字符串值即时转换为枚举。我收到以下错误。无法将类型“System.Collections.Generic.KeyValuePair”转换为“System.Collections.Generic.KeyValuePair”如何x[1]从上面代码中的字符串(“asc”、“desc”)转换为枚举,从而通过 Linq 填充字典“orderBy” .ToDictionary?
2 回答
温温酱
TA贡献1752条经验 获得超4个赞
由于TryParse返回 a bool,并且您已定义字典来获取SortDirection值,因此调用失败。
相反,您可以使用 的结果TryParse作为条件,然后在成功时使用该值:
var orderedBy = new Dictionary<string, SortDirection>();
var sortDirection = SortDirection.asc;
var keyValuePair = "ClientNo asc,ClientLastName asc";
orderedBy = keyValuePair.Split(',')
.Select(x => x.Split(' '))
.Where(x => x.Length > 1 && Enum.TryParse(x[1], false, out sortDirection))
.ToDictionary(x => x[0],
x => (SortDirection) Enum.Parse(typeof(SortDirection), x[1]));
紫衣仙女
TA贡献1839条经验 获得超15个赞
如果您确定字符串中始终包含有效值,则只需使用Enum.Parse
代替Enum.TryParse
。这将返回转换后的值而不是布尔值。
如果该值碰巧不正确,您将收到异常。
- 2 回答
- 0 关注
- 105 浏览
添加回答
举报
0/150
提交
取消