我有一個消息對象,它封裝了我無法控制的消息格式。格式是鍵/值對的簡單列表。我想從給定的消息中提取用戶列表。例如,給出以下消息...使用Linq查詢替換for-switch循環
1. 200->....
2. 300->....
3. ....
4. 405->....
5. 001->first_user_name
6. 002->first_user_phone
7. 003->first_user_fax
8. 001->second_user_name
9. 001->third_user_name
10. 002->third_user_phone
11. 003->third_user_fax
12. 004->third_user_address
13. .....
14. 001->last_user_name
15. 003->last_user_fax
我想提取四個用戶提供的屬性集。初始密鑰200/300 .... 405表示我不需要的字段,可以跳過以獲取用戶數據。
每個用戶的數據都在連續的字段中,但字段的數量取決於有多少用戶知道的信息。以下方法做我正在尋找的東西。它使用枚舉可能的鍵類型和方法來查找包含用戶數據的第一個字段的索引。
private List<User> ParseUsers(Message message)
{
List<User> users = new List<User>();
User user = null; String val = String.Empty;
for(Int32 i = message.IndexOfFirst(Keys.Name); i < message.Count; i++)
{
val = message[ i ].Val;
switch(message[ i ].Key)
{
case Keys.Name:
user = new User(val);
users.Add(user);
break;
case Keys.Phone:
user.Phone = val;
break;
case Keys.Fax:
user.Fax = val;
break;
case Keys.Address:
user.Address = val;
break;
default:
break;
}
}
return users;
}
我想知道是否有可能用Linq查詢替換方法。我無法告訴Linq選擇一個新用戶並填充其所有匹配數據的字段,直到找到下一個用戶條目的開始。
注意:相對密鑰號碼是真實消息格式的隨機數(不是1,2,3,4)。
您使用的是Resharper嗎?它非常適合重構LINQ表達式的循環。 –
將此轉換爲LINQ查詢有什麼好處?你的代碼對我來說看起來不錯。 – dtb
@Marian:只有5.x IIRC – sehe