неявный оператор

Это поведение является правильным.

Если совпадения - это список, вы можете использовать * ngFor. Его работа, как цикл, в HTML. Затем вы можете распечатать каждое значение.

Пожалуйста, прочитайте это: https://angular.io/guide/displaying-data#showing-an-array-property-with-ngfor

(Вам не нужно использовать это ключевое слово в html)

19
задан MatthewMartin 15 October 2014 в 16:14
поделиться

5 ответов

Неявный означает, что преобразование не требует броска в Вашем коде.

можно теперь сделать это:

Savepoint point = new Savepoint();
if(point) // becomes a bool using your operator
{
}

вместо того, чтобы иметь необходимость сделать это:

Savepoint point = new Savepoint();
if((bool)point) // an "explicit" conversion
{
}

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

float f = 6.5;
double d = f; // implicit conversion

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

long l = 20;
// short s = l;
short s = (short)l;  // explicit conversion
29
ответ дан 30 November 2019 в 03:16
поделиться

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

if (point) {

вместо:

if (point != null) {

, Если это используется тот путь, который скрывает то, что код на самом деле делает, и это идет вразрез в значительной степени со всем, о чем C#.

9
ответ дан 30 November 2019 в 03:16
поделиться

Только добавить к ответу mquander.

Из спецификации языка C# 3.0:

объявление оператора преобразования А, которое включает implicit ключевое слово, представляет пользовательское неявное преобразование. Неявные преобразования могут произойти во множестве ситуаций, включая функциональные членские вызовы, выражения приведения типа и присвоения.

(разделяют 10.10.3)

2
ответ дан 30 November 2019 в 03:16
поделиться

Операторы преобразования преобразовывают от одного типа до другого. Неявный означает, что Вы не должны вводить явный бросок в коде для преобразования для случая, явный требует, чтобы бросил в коде, который назовут.

Вы используете неявный оператор преобразования, когда Вы уверены, что преобразование не теряет данных. Например, с расширяющимися приведениями (интервал-> долго, плавание-> дважды). Явные операторы преобразования используются, когда некоторое состояние будет потеряно, или Вы не хотите, чтобы компилятор автоматически завинтил клиентский код путем вставки преобразований повсеместно.

преобразование А как Ваше действительно нанесло бы ущерб, потому что это нецелесообразно для выполнения этого конкретного преобразования.

1
ответ дан 30 November 2019 в 03:16
поделиться

Необходимо определить 'неявный' потому что также существуют явные операторы.

Это означает, что преобразование между булевской переменной и Точкой сохранения может быть сделано неявно, например, = скрытый.

Savepoint s = new Savepoint();
bool b = s;

Явное преобразование, например, очевидный, может быть сделано этот путь:

 Savepoint s = new Savepoint();
 bool b = (bool)s;

Неявное преобразование часто используется, когда нет никакой возможной потери данных, т.е. Int16 (short) к Int32 (int). Но если это возможно, необходимо 'согласиться' с ним с помощью явного преобразования.

В Вашем случае, например, если Savepoint просто

struct Savepoint
{
  public bool data;
}

, можно использовать неявное преобразование, потому что никакая потеря данных не возможна:

Savepoint s = new Savepoint();
s.data = true;
bool b = s;

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

0
ответ дан 30 November 2019 в 03:16
поделиться
Другие вопросы по тегам:

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