C # 캐스트 전체 어레이?
이 Array.ConvertAll
방법은 보이지만 Converter
인수로 a 가 필요합니다 . 내 클래스에서 이미 암시 적 변환기를 정의했는데 변환기가 필요한 이유를 알 수 없습니다.
public static implicit operator Vec2(PointF p)
{
return new Vec2(p.X, p.Y);
}
PointF
s 배열을 s 배열로 캐스팅하려고합니다 Vec2
. 이 작업을 수행하는 좋은 방법이 있습니까? 아니면 그냥 빨아 들이고 (다른) 변환기를 작성하거나 요소에 대해 루프를 작성해야합니까?
Cast
/ 'Select'를 사용하는 제안 된 LINQ 솔루션 은 좋지만 여기에서 배열로 작업하고 있다는 것을 알고 있으므로 사용하는 ConvertAll
것이 다소 효율적이고 간단합니다.
var newArray = Array.ConvertAll(array, item => (NewType)item);
사용 ConvertAll
은
a) 어레이가 한 번만 반복됨,
b) 작업이 어레이에 대해 더 최적화 됨을 의미 합니다 (사용하지 않음 IEnumerator<T>
).
Converter<TInput, TOutput>
형식이 혼동 하지 않도록하십시오 . 단순한 대리자이므로 위에 표시된대로 람다 식을 전달할 수 있습니다.
이 오래된 질문에 대한 업데이트로 이제 다음을 수행 할 수 있습니다.
myArray.Cast<Vec2>().ToArray();
여기서 myArray는 소스 객체를 포함하고 Vec2는 캐스트하려는 유형입니다.
Cast는 사용자 정의 암시 적 변환을 고려하지 않으므로 배열을 이와 같이 캐스팅 할 수 없습니다. 대신 선택을 사용할 수 있습니다.
myArray.Select(p => (Vec2)p).ToArray();
또는 변환기를 작성하십시오.
Array.ConvertAll(points, (p => (Vec2)p));
후자는 결과의 크기를 미리 알고 있으므로 더 효율적일 수 있습니다.
참조 URL : https://stackoverflow.com/questions/2068120/c-sharp-cast-entire-array
'programing' 카테고리의 다른 글
Python Imaging Library에서 크기가 조정 된 이미지의 품질을 조정하는 방법은 무엇입니까? (0) | 2021.01.17 |
---|---|
복사하지 않고 C ++ std :: vector와 C 배열 간 변환 (0) | 2021.01.17 |
Python의`urllib2` : Wikipedia 페이지를`urlopen` 할 때 403 오류가 발생하는 이유는 무엇입니까? (0) | 2021.01.17 |
체크 박스가있는 Android ListView 및 모든 클릭 가능 (0) | 2021.01.17 |
ggplot2 scale_brewer의 역순 (0) | 2021.01.17 |