我已經看過這個問題,雖然它解決了他們手頭的問題,但它并沒有跳到我身上,我的問題仍然存在。我有以下代碼,其中一個字符串被拆分為其預期的鍵/值對,但通常會將其轉儲到字典中<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 關注
- 138 瀏覽
添加回答
舉報
0/150
提交
取消