Это поведение является правильным.
Если совпадения - это список, вы можете использовать * ngFor. Его работа, как цикл, в HTML. Затем вы можете распечатать каждое значение.
Пожалуйста, прочитайте это: https://angular.io/guide/displaying-data#showing-an-array-property-with-ngfor
(Вам не нужно использовать это ключевое слово в html)
Неявный означает, что преобразование не требует броска в Вашем коде.
можно теперь сделать это:
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
Это похоже на неправильное употребление неявного оператора. Я не знаю то, что делает класс Точки сохранения, но преобразование его к булевской переменной не кажется логичным. Неявный оператор позволяет Вам проверить, является ли ссылка Точки сохранения нулевой или не путем простой оценки ссылки:
if (point) {
вместо:
if (point != null) {
, Если это используется тот путь, который скрывает то, что код на самом деле делает, и это идет вразрез в значительной степени со всем, о чем C#.
Только добавить к ответу mquander.
Из спецификации языка C# 3.0:
объявление оператора преобразования А, которое включает
implicit
ключевое слово, представляет пользовательское неявное преобразование. Неявные преобразования могут произойти во множестве ситуаций, включая функциональные членские вызовы, выражения приведения типа и присвоения.
(разделяют 10.10.3)
Операторы преобразования преобразовывают от одного типа до другого. Неявный означает, что Вы не должны вводить явный бросок в коде для преобразования для случая, явный требует, чтобы бросил в коде, который назовут.
Вы используете неявный оператор преобразования, когда Вы уверены, что преобразование не теряет данных. Например, с расширяющимися приведениями (интервал-> долго, плавание-> дважды). Явные операторы преобразования используются, когда некоторое состояние будет потеряно, или Вы не хотите, чтобы компилятор автоматически завинтил клиентский код путем вставки преобразований повсеместно.
преобразование А как Ваше действительно нанесло бы ущерб, потому что это нецелесообразно для выполнения этого конкретного преобразования.
Необходимо определить 'неявный' потому что также существуют явные операторы.
Это означает, что преобразование между булевской переменной и Точкой сохранения может быть сделано неявно, например, = скрытый.
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;
иначе я рекомендую Вам определить явный оператор!