programing

C # 캐스트 전체 어레이?

shortcode 2021. 1. 17. 11:17
반응형

C # 캐스트 전체 어레이?


Array.ConvertAll방법은 보이지만 Converter인수로 a 필요합니다 . 내 클래스에서 이미 암시 적 변환기를 정의했는데 변환기가 필요한 이유를 알 수 없습니다.

    public static implicit operator Vec2(PointF p)
    {
        return new Vec2(p.X, p.Y);
    }

PointFs 배열을 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

반응형