猿问

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

我已经看过这个问题,虽然它解决了他们手头的问题,但它并没有跳到我身上,我的问题仍然存在。

我有以下代码,其中一个字符串被拆分为其预期的键/值对,但通常会将其转储到字典中<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


千巷猫影
浏览 106回答 2
2回答

温温酱

由于TryParse返回 a bool,并且您已定义字典来获取SortDirection值,因此调用失败。相反,您可以使用 的结果TryParse作为条件,然后在成功时使用该值:var orderedBy = new Dictionary<string, SortDirection>();var sortDirection = SortDirection.asc;var keyValuePair = "ClientNo asc,ClientLastName asc";orderedBy = keyValuePair.Split(',')&nbsp; &nbsp; .Select(x => x.Split(' '))&nbsp; &nbsp; .Where(x => x.Length > 1 && Enum.TryParse(x[1], false, out sortDirection))&nbsp; &nbsp; .ToDictionary(x => x[0],&nbsp; &nbsp; &nbsp; &nbsp; x => (SortDirection) Enum.Parse(typeof(SortDirection), x[1]));

紫衣仙女

如果您确定字符串中始终包含有效值,则只需使用Enum.Parse代替Enum.TryParse。这将返回转换后的值而不是布尔值。如果该值碰巧不正确,您将收到异常。
随时随地看视频慕课网APP
我要回答