Есть ли неопровержимые доводы ПРОТИВ использования ключевого слова C# “как”?

Решение: используйте любой из следующих столбцов, чтобы получить точную повторную выборку:

df['4ma'] = df.resample('4T', base=2).mean().shift(1)
df['7ma'] = df.resample('7T', base=3).mean().shift(1)
df['8ma'] = df.resample('8T', base=2).mean().shift(1)
df['9ma'] = df.resample('9T', base=1).mean().shift(1)

Следующий поток GitHub предлагает использовать «base = x» для решения этой проблемы в Pandas: https: / /github.com/pandas-dev/pandas/issues/4197

По сути, при понижающей дискретизации в Pandas с мелкими данными, Pandas пытается «вывести» различные начальные точки. Изменение базы меняет место, где начинается выборка.

Я не понимаю логику предполагаемой особенности Pandas, но настройка базы решает эту проблему.

7
задан Mark Carpenter 4 February 2010 в 22:29
поделиться

9 ответов

Я предпочитаю броски as в большинстве случаев, потому что обычно, если тип объекта является неправильным, который указывает на ошибку. Ошибки должны вызвать исключения IMO - и InvalidCastException в точно строке, которая выполняет бросок, намного более ясно, чем a NullReferenceExceptionнамного позже в коде.

as должен использоваться, когда это допустимо и законно быть переданным ссылка на объект типа, который Вы не хотите. Та ситуация подходит, но не так часто как нормальный кастинг, по моему опыту.

Сравнение использования типов GetType(), однако, очень редко правильное решение - только уместно, когда Вы хотите проверить на точный включенный тип, а не совместимый тип.

Я записал значительно более длинный ответ о "броске по сравнению с как" обсуждение в другом месте.

12
ответ дан 6 December 2019 в 05:08
поделиться

Вообще говоря, эти два отрывка не эквивалентны. TreeViewItem i = sender as TreeViewItem приведет к корректному результату даже если sender главный главный ребенок TreeViewItem, тогда как sender.GetType() == typeof(TreeViewItem) будет true только, когда sender точно TreeViewItem и ни один из его возможных подклассов.

6
ответ дан 6 December 2019 в 05:08
поделиться

Нисколько - это дает Вам шанс проверить, что преобразование (бросок) было сделано хорошо. Если Вы делаете

TreeViewItem i = (TreeViewItem) sender;

Вы могли бы получить исключение, если состав исполнителей перестал работать.

7
ответ дан 6 December 2019 в 05:08
поделиться

"как": хороший материал. используйте все это время.

если Вы действительно хотите альтернативу ручному сравнению попытки типов:

  if(person is Employee) { }

чтения еще лучше.

4
ответ дан 6 December 2019 в 05:08
поделиться

Ваш пример был бы лучше записан как:

if (sender is TreeViewItem) {
    TreeViewItem i = (TreeViewItem)sender;
    ...
}

Это - точно этот двойной тип, проверяющий что as оператор может помочь избежать. Таким образом для Вашего приведенного примера, я сказал бы, что это - определенно хорошее решение.

Однако существуют ситуации, где Вы действительно хотите бросок. Если Вы ожидаете a TreeViewItem и не хочу ничто иное, кастинг удостоверится InvalidCastException брошен, если Вам дают что-либо еще.

Точно так же, как в большинстве ситуаций, здесь нет никакой всеохватывающей нормы: используйте правильный инструмент для правильного задания.

4
ответ дан 6 December 2019 в 05:08
поделиться

Если Вы захотите плоскость (не nullable) тип значения, то очевидно, это не будет работать, например:

int test = sender as int;

не допустимо, однако:

int? test = sender as int?;

позволяется.

2
ответ дан 6 December 2019 в 05:08
поделиться

Нет, я использую его вполне немного. Это позволяет Вам избегать InvalidCastExceptions в очевидном способе.

Например:

TreeViewItem tvItem = sender as TreeViewItem;

if (tvItem != null) return;

// Do stuff

в противоположность:

try
{
    TreeViewItem tvItem = (TreeViewItem)sender;
    // Do stuff.
}
catch (InvalidCastException ex)
{
    // Didn't work, do something about it
    return; // ... or not...
}
1
ответ дан 6 December 2019 в 05:08
поделиться

"как" быстрее, но вещи принять во внимание:

  • "как" возвращает пустой указатель вместо того, чтобы выдать исключение, если это - проблема

  • это не сделает пользовательских преобразований iirc

  • это не работает на ссылку-> значение

Править: "как" определенно быстрее (http://www.codeproject.com/KB/cs/csharpcasts.aspx)

Edit2: так в основном скорость по сравнению с решением безопасности

1
ответ дан 6 December 2019 в 05:08
поделиться

Если получение неправильного типа было бы ошибкой, затем необходимо использовать бросок. Причина этого состоит в том, что действительно существует проблема, и необходимо знать об этом.

Если возможно, что значение будет нулевым, и это не ошибка в системе, когда это происходит затем использование "как". Так как причина - это, необходимо использовать "в качестве" любого времени, когда возвращение пустого указателя приемлемо.

Следует иметь в виду, что Вы не можете использовать для преобразования в типы значения, потому что нулевое значение не приемлемо для них. Если Вы будете иметь тип значения и захотите использовать "как", то необходимо будет использовать nullable тип значения.

Когда использовать "в качестве" по сравнению с кастингом

1
ответ дан 6 December 2019 в 05:08
поделиться
Другие вопросы по тегам:

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