Целый массив броска C#?

Я вижу это Array.ConvertAll метод, но это требует a Converter как аргумент. Я не вижу, почему мне нужен преобразователь, когда я уже определил неявный в своем классе:

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

Я пытаюсь бросить массив PointFs к массиву Vec2s. Существует ли хороший способ сделать это? Или я должен просто высосать его и запись (другой) преобразователь или цикл по элементам?

53
задан mpen 14 January 2010 в 12:47
поделиться

2 ответа

Cast не учитывает определяемые пользователем неявные преобразования, поэтому невозможно привести массив таким образом. Вместо этого можно выбрать

myArray.Select(p => (Vec2)p).ToArray();

Или написать конвертер:

Array.ConvertAll(points, (p => (Vec2)p));

Последний, вероятно, более эффективен, поскольку размер результата заранее известен.

-121--1036922-

В диалоговом окне «Проверка» перейдите на вкладку «Предупреждение об ошибке» и снимите флажок «Показывать предупреждение об ошибке после ввода недопустимых данных».

-121--3286753-

Предлагаемое решение LINQ с использованием Cast /' Select 'прекрасно, но поскольку вы знаете, что работаете с массивом здесь, использование ConvertAll является более эффективным и столь же простым.

var newArray = Array.ConvertAll(array, item => (NewType)item);

Использование ConvertAll означает
a) массив итерируется только один раз,
b) операция более оптимизирована для массивов (не использует IEnumerator < T > ).

Не позволяйте типу Converter < TInput, TOutput > сбить вас с толку - это простой делегат, и, таким образом, вы можете передать лямбда-выражение для него, как показано выше.

92
ответ дан 7 November 2019 в 08:24
поделиться

UITextField предназначен только для однострочного текста. Если требуется несколько строк текста, необходимо использовать класс UITextView .

Следует отметить, что UITextView наследует от UIScrollView , поэтому если вы не хотите прокрутки, вы можете придерживаться UITextField и мириться с текстом, находящимся в одной строке... Однажды я попытался подкласс UITextView , чтобы сделать его похожим на многострочный UITextField , но UIScrollView сделал задачу кошмаром - в конце концов я просто вернулся к использованию простого UITextField .

-121--2771330-

Некоторые произвольные вычисления, основанные на выборке. Тип «m a» является случайной переменной типа «a» и «a - > m b» является «случайной функцией». Случайные величины могут очень просто обрабатываться таким образом. «replicateM n» используется для получения независимых выборок из той же переменной.

Запись do также хорошо: x < - y означает x - выборка из случайной величины y.

-121--3153583-

Cast не учитывает неявные преобразования, определяемые пользователем, поэтому невозможно привести массив таким образом. Вместо этого можно выбрать

myArray.Select(p => (Vec2)p).ToArray();

Или написать конвертер:

Array.ConvertAll(points, (p => (Vec2)p));

Последний, вероятно, более эффективен, поскольку размер результата заранее известен.

18
ответ дан 7 November 2019 в 08:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: