2011-02-09 59 views

Trả lời

77

Sử dụng phương pháp ToDictionary:

Dictionary<string, string> dString = dObject.ToDictionary(k => k.Key, k => k.Value.ToString()); 

Ở đây bạn tái sử dụng chìa khóa từ điển gốc và bạn chuyển đổi các giá trị cho xâu kí tự bằng cách sử dụng phương pháp ToString.

Nếu từ điển của bạn có thể chứa giá trị null bạn nên thêm một kiểm tra null trước khi thực hiện ToString:

Dictionary<string, string> dString = dObject.ToDictionary(k => k.Key, k => k.Value == null ? "" : k.Value.ToString()); 

Lý do làm việc này là các Dictionary<string, object> thực sự là một IEnumerable<KeyValuePair<string,object>>. Ví dụ mã trên lặp lại thông qua enumerable và xây dựng một từ điển mới bằng cách sử dụng phương pháp ToDictionary.

Edit:

Trong Net 2.0, bạn không thể sử dụng phương pháp ToDictionary, nhưng bạn có thể đạt được cùng sử dụng một kiểu cũ tốt foreach:

Dictionary<string, string> sd = new Dictionary<string, string>(); 
foreach (KeyValuePair<string, object> keyValuePair in dict) 
{ 
    sd.Add(keyValuePair.Key, keyValuePair.Value.ToString()); 
} 

Edit2:

Nếu bạn đang sử dụng .Net 2.0 và bạn có thể có giá trị null trong từ điển, những điều sau đây phải an toàn:

Dictionary<string, string> sd = new Dictionary<string, string>(); 
foreach (KeyValuePair<string, object> keyValuePair in dict) 
{ 
    sd.Add(keyValuePair.Key, keyValuePair.Value == null ? "" : keyValuePair.Value.ToString()); 
} 
+0

Tôi đang sử dụng .NET 2.0, có thể có trong đó. Tôi không nhận được "ToDictionary" –

+0

@Rune: 'k.Value.ToString()' trả về luôn luôn giống như '(string) k.Value'? –

+0

@Oscar: Không. (String) k.Value sẽ thất bại nếu giá trị là một đối tượng không phải chuỗi. ToString() là an toàn cho tất cả các giá trị không null. –

2

Làm thế nào về:

Dictionary<string, string> newDictionary = dObject.ToDictionary(k => k.Key, k => (string) k.Value); 
+0

Điều này sẽ thất bại nếu từ điển chứa các giá trị không phải chuỗi. Bạn không thể chuyển đổi một int thành một chuỗi chẳng hạn. –

+0

Trước hết tôi đang sử dụng .NET 2.0, có thể có trong đó. Tôi không nhận được phương pháp "ToDictionary". –

+0

Vâng, tôi cho rằng nếu anh ta muốn làm điều đó là bởi vì từ điển chứa 'chuỗi', nhưng dù sao, đó là hợp lệ. –

5

.NET 3.5:

Dictionary<string, string> result = dObject.ToDictionary(kvp => kvp.Key, kvp => Convert.ToString(kvp.Value)); 

.NET 2.0:

Dictionary<string, string> result = new Dictionary<string, string>(); 
foreach (KeyValuePair<string, object> kvp in dObject) result.Add(kvp.Key, Convert.ToString(kvp.Value)); 
4

Vì bạn đang sử dụng .net 2.0:

Dictionary<string, string> dString = new Dictionary<string, string>(); 

foreach (KeyValuePair<string, object> item in dObject) 
{ 
    dString.Add(item.Key, item.Value.ToString()); 
    //here item.Value.ToString() is an example 
    //you should convert your item to string according to the requirement 
} 
+0

Điều gì sẽ xảy ra nếu có giá trị NULL trong đó? –

+3

@MKS: Đó là lý do tại sao tôi nói "chuyển đổi mục của bạn thành chuỗi theo yêu cầu", ví dụ: bạn có thể sử dụng 'string.Empty' cho giá trị null hoặc chuỗi" NULL "cho giá trị null ... mọi thứ phụ thuộc về yêu cầu. –

+0

Đôi khi có thể có giá trị null trong khóa, vui lòng đề xuất cách chuyển đổi nó? –

1

Trong Net 2.0 có lẽ người bạn thân nhất của bạn là foreach loop:

Dictionary<string, object> dObject = new Dictionary<string, object>(); 
Dictionary<string, string> newObjects = new Dictionary<string, string>(); 

foreach (KeyValuePair<string, object> keyValuePair in dObject) 
{ 
    newObjects.Add(keyValuePair.Key, keyValuePair.Value.ToString()); 
} 
0
Dictionary<string, string> dString = dObject.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToString()); 

Nó chỉ là ý tưởng. Bạn có thể chèn bất kỳ xác minh nào.

Các vấn đề liên quan