2012-06-22 3 views
7

모두, 나는 정신 갔다 (이것은 질문이 아니다). 나는이 작동하지 않습니다 List<object[]>C# 목록 <string[]> 목록에 <object[]> 전환

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

List<string[]>을 변환 할,하지만 난 뭔가를 잊어 버린하지 않는 한이 방법을 사용하여 변환 (더 람다 필요 없음) 가능해야한다?

감사합니다. 단지

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

또는

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

'... OfType ()' –

답변

16

당신은 같은 것을 사용하고 싶습니다.

Enuemrable.OfType은 잘못된 캐스트를 걸러냅니다. 대신 Enumerable.Cast을 고려해 볼 수 있습니다. 실수하면 실수로 throw됩니다. string[]object[]을 상속받지 못했다면 (나는 솔직히 기억이 안납니다.) 변환을 제공하려면 Enumerable.Select으로 전화해야 할 수도 있습니다.

당신은 분명히 어딘가에 Enumerable.ToList 호출이 필요합니다.

+1

너무 바보. 고마워 젠장, 긴 금요일 이었어 ... – MoonKnight

3

OfType<string[]>IEnumerable<string[]> 아닌 List<object[]> 반환

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

또는 C#을 4.0 :

0

.NET 4.0, 이런 식

때문에 배열 공분산의
List<string[]> sList = new List<string[]> {new []{"A", "B"}}; 
List<object[]> oList = sList.Cast<object[]>().ToList(); 
2

을하는 것에 대해, 당신은 다만 수있는 방법 :

// 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[]>(); 

그러나 당신이 변이 할 수 없을 것입니다 점에 유의 문자열 배열이 아닌 다른 모든 배열 (배열 공분산은 실제로 안전하지 않기 때문에). 당신이 진정으로 유연한 쓰기 가능한 객체 배열을 원하는 경우에

, 당신은 할 수 있습니다 :

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

(또는)

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

그런 다음의 경우 각각의 내부 배열의 요소를 대체 할 수있는 거의 모든를 제발 부탁해.

+0

고마워. 그러나, 나의 origonal 유형 질문을 dispite. 위의 첫 번째는 내가 시도했지만'var'없이, 왜이 경우에'var'가 결정적인 차이를 만들어 내는지입니다 - 저는 응답이 그것이'ToList()'를 수행하고 있다고 가정합니다. 정말 ... 시간 내 주셔서 감사합니다. – MoonKnight

+0

'var'은 필요하지 않습니다.'List result = parameters.ToList ();'을 할 수 있습니다. 그래서 원래의 시도가 잘못되었는지 확신 할 수 없습니다. – Ani