2012-06-22 38 views
7

Tất cả, tôi đã đi tinh thần (đây không phải là câu hỏi). Tôi muốn chuyển đổi List<string[]> để List<object[]>C# Danh sách <string[]> để liệt kê <object[]> Chuyển đổi

List<string[]> parameters = GetParameters(tmpConn, name); 
List<object[]> objParams = parameters.OfType<object[]>(); 

đây không phải đang làm việc, nhưng trừ khi tôi đã quên một cái gì đó một chuyển đổi sử dụng phương pháp này nên có thể (không Lambdas cần thiết)?

Cảm ơn thời gian của bạn.

+1

'... OfType ()' –

Trả lời

16

Bạn muốn sử dụng cái gì đó như:

List<object[]> objParams = parameters.OfType<object[]>().ToList(); 

hoặc trong C# 4.0, chỉ

List<object[]> objParams = parameters.ToList<object[]>(); 

hoặc

List<object[]> objParams = parameters.ConvertAll(s => (object[])s); 
+1

Rất ngớ ngẩn. Cảm ơn anh bạn, đã là một Thứ Sáu dài ... – MoonKnight

3

OfType<string[]> trả về một IEnumerable<string[]>, không phải là một List<object[]>.

Enuemrable.OfType lọc ra mọi phôi không hợp lệ. Bạn có thể muốn xem xét Enumerable.Cast thay vào đó, điều này sẽ ném nếu bạn mắc lỗi. Nếu string[] không kế thừa từ object[] (Tôi thành thật không nhớ), bạn có thể cần phải gọi Enumerable.Select để cung cấp chuyển đổi.

Bạn chắc chắn cần một cuộc gọi Enumerable.ToList ở đâu đó.

0

Làm thế nào về làm nó theo cách này

List<string[]> sList = new List<string[]> {new []{"A", "B"}}; 
List<object[]> oList = sList.Cast<object[]>().ToList(); 
2

Do mảng hiệp phương sai, trong .NET 4.0, bạn có thể chỉ cần làm:

// Works because: 
// a) In .NET, a string[] is an object[] 
// b) In .NET 4.0, an IEnumerable<Derived> is an IEnumerable<Base>    
var result = parameters.ToList<object[]>(); 

Nhưng lưu ý rằng bạn sẽ không có khả năng đột biến những mảng đó với bất kỳ thứ gì ngoài chuỗi (vì mảng hiệp phương sai thực sự không an toàn).

Nếu bạn muốn mảng đối tượng thực sự linh hoạt có thể ghi, bạn có thể làm:

var result = parameters.Select(array => array.ToArray<object>()) 
         .ToList(); 

(hoặc)

var result = parameters.ConvertAll(array => array.ToArray<object>()); 

Sau đó, bạn có thể thay thế các yếu tố của từng mảng nội với trường hợp của khá nhiều bất kỳ loại bạn vui lòng.

+0

Cảm ơn vì điều này. Tuy nhiên, xua tan câu hỏi được nhập của tôi. Đầu tiên ở trên là những gì tôi đã thử nhưng không có 'var', tại sao trong trường hợp này,' var' tạo ra sự khác biệt quan trọng - tôi cho rằng câu trả lời là nó đang thực hiện 'ToList()' cho tôi. Awsome thực sự ... Cảm ơn thời gian của bạn. – MoonKnight

+0

'var' là không cần thiết, bạn có thể làm' List result = parameters.ToList (); ', vì vậy tôi không chắc chắn nơi nỗ lực ban đầu của bạn đã đi sai. – Ani

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