예제 #1
0
        public static ArrayConversionResult <T, U> Convert <T, U>(T[] array, ICustomConverter <T, U> converter)
        {
            if ((array == null) || (array.Length == 0))
            {
                return(ArrayConversionResult <T, U> .Empty());
            }

            if (converter == null)
            {
                converter = new CustomConverter <T, U>();
            }

            if (!converter.CanConvertBetweenTypes())
            {
                return(ArrayConversionResult <T, U> .Empty());
            }

            var convertedValues   = new List <U>();
            var failConvertValues = new List <T>();

            for (int i = 0; i < array.Length; i++)
            {
                T item = array[i];
                U convertedItem;
                if (converter.TryConvertValue(item, out convertedItem))
                {
                    convertedValues.Add(convertedItem);
                }
                else
                {
                    failConvertValues.Add(item);
                }
            }

            var nonConvertibleValues = failConvertValues.ToArray();

            var effectivelyConvertedValues = convertedValues.ToArray();

            return(new ArrayConversionResult <T, U>(effectivelyConvertedValues, nonConvertibleValues));
        }
예제 #2
0
        public static U[] Convert <T, U>(T[] array, ICustomConverter <T, U> converter, out T[] nonConvertibleValues)
        {
            nonConvertibleValues = new T[0];

            if ((array == null) || (array.Length == 0))
            {
                return(new U[0]);
            }

            if (converter == null)
            {
                converter = new CustomConverter <T, U>();
            }

            if (!converter.CanConvertBetweenTypes())
            {
                return(new U[0]);
            }

            var convertedValues   = new List <U>();
            var failConvertValues = new List <T>();

            for (int i = 0; i < array.Length; i++)
            {
                T item = array[i];
                U convertedItem;
                if (converter.TryConvertValue(item, out convertedItem))
                {
                    convertedValues.Add(convertedItem);
                }
                else
                {
                    failConvertValues.Add(item);
                }
            }

            nonConvertibleValues = failConvertValues.ToArray();

            return(convertedValues.ToArray());
        }