为了账号安全,请及时绑定邮箱和手机立即绑定

在 Linq 查询中使用 enum Tryparse,其中输入是字符串,输出是以 enum 作为值的

在 Linq 查询中使用 enum Tryparse,其中输入是字符串,输出是以 enum 作为值的

C#
千巷猫影 2023-09-16 16:57:11
我已经看过这个问题,虽然它解决了他们手头的问题,但它并没有跳到我身上,我的问题仍然存在。我有以下代码,其中一个字符串被拆分为其预期的键/值对,但通常会将其转储到字典中<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]));


查看完整回答
反对 回复 2023-09-16
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

如果您确定字符串中始终包含有效值,则只需使用Enum.Parse代替Enum.TryParse。这将返回转换后的值而不是布尔值。

如果该值碰巧不正确,您将收到异常。

查看完整回答
反对 回复 2023-09-16
  • 2 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信