내가 가지고있는 것처럼 보이는 방법IL : <T>을 T [] 유형의 배열로 캐스팅하면 열거가 발생합니까?
T[] field;
public Method(IList<T> argument)
{
this.field = (T[])argument;
}
방법의 몸은 캐스팅 중에 열거 걸릴 장소를하지 실행되면? 기본 유형이 다른 경우 변경됩니까?
내가 가지고있는 것처럼 보이는 방법IL : <T>을 T [] 유형의 배열로 캐스팅하면 열거가 발생합니까?
T[] field;
public Method(IList<T> argument)
{
this.field = (T[])argument;
}
방법의 몸은 캐스팅 중에 열거 걸릴 장소를하지 실행되면? 기본 유형이 다른 경우 변경됩니까?
아니요, 아무 것도 열거하지 않습니다. argument
실제로 이T[]
일 경우 성공하거나, 그렇지 않은 경우 InvalidCastException
예외를 throw합니다. argument
이 null 인 경우 null을 반환합니다.
이것에 대해 아무 말도하지 않아도 좋지 않은 디자인일까요? 호출자가 목록을 변경할 수 있고 왜 메서드가 배열을 가져 가지 않았습니까? – Steven
argument
이 배열 (T
유형)에 대한 참조 인 경우에는 열거 형이 없습니다. 이는 간단한 형 변환입니다.
argument
이 List<T>
또는 IList를 구현하는 다른 클래스에 대한 참조 인 경우 잠재적으로 캐스팅 예외가 발생할 수 있습니다. (T[]
으로의 암시 또는 전환 변환이있을 수 있으므로 가능성이 거의 없습니다.)
편집 : Jon이 지적한대로 일반 메서드에서는 변환이 수행되지 않으므로 위의 괄호가 잘못되었습니다.
변환 *이 * 존재하더라도 컴파일러가 컴파일 할 때 컴파일러에서 알지 못하기 때문에 사용되지 않습니다. –
@ 존 : 내가 따를 지 모르겠다 - 나는 단지 명시적인 변환으로 테스트를 마쳤다. 편집 : 나는 그것을 다시 (내 테스트에서 실수) 가져 가라. 당신은 정말로 옳습니다. –
제쳐두고 현실에서는 field = argument.ToArray()를 사용하여 열거 형을 열거하고 싶을 것입니다. –