Я хочу поместить значения из переменной "Company" в EditCoForm и в поля ввода текста HTML.
blockquote>При создании группы форм необходимо указать эти значения (из
company
):// suppose company is company = { coid: 'coid', coname: 'coname' } this.EditCoForm = this.formBuilder.group({ coid: [this.company.coid, [Validators.required]], coname: [this.company.coname, [Validators.required]], ...
Затем оба элемента управления формы с соответствующими именами и входными значениями (в шаблоне HTML) будет иметь значения из
company
:
Или, если это невозможно сделать при создании группы форм, вы также можете установить значения для группы форм следующим образом:
[1110 ] Вот стекаблицthis.EditCoForm.setValue({ coid: this.company.coid, coname: this.company.coname, ... });
The compiler first tries to evaluate the right-hand expression:
GetBoolValue() ? 10 : null
The 10
is an int
literal (not int?
) and null
is, well, null
. There's no implicit conversion between those two hence the error message.
If you change the right-hand expression to one of the following then it compiles because there is an implicit conversion between int?
and null
(#1) and between int
and int?
(#2, #3).
GetBoolValue() ? (int?)10 : null // #1
GetBoolValue() ? 10 : (int?)null // #2
GetBoolValue() ? 10 : default(int?) // #3
Попробуйте следующее:
int? x = GetBoolValue() ? 10 : (int?)null;
По сути, происходит то, что условный оператор не может определить "тип возврата" выражения. Поскольку компилятор неявно решает, что 10
является int
, он решает, что возвращаемый тип этого выражения также должен быть int
. Поскольку int
не может быть нулевым
(третий операнд условного оператора), он жалуется.
Приведением null
к Nullable < int>
мы явно сообщаем компилятору, что возвращаемый тип этого выражения должен быть Nullable
. С таким же успехом вы могли бы преобразовать 10
в int?
и получить тот же эффект.
Между прочим, реализация компилятора C # от Microsoft фактически получает анализ типов условный оператор неверен в очень тонкой и интересной (для меня) форме. Моя статья об этом Проблемы с выводом типов, часть первая .
int? x = GetBoolValue() ? 10 : (int?)null;
Причина, по которой вы это видите, заключается в том, что за кулисами вы используете Nullable и вам нужно сообщить C #, что ваш «null» является пустым экземпляром Nullable.
Попробуйте одно из следующих:
int? x = GetBoolValue() ? (int?)10 : null;
int? x = GetBoolValue() ? 10 : (int?)null;
Проблема в том, что тернарный оператор выводит тип на основе вашего первого присвоения параметра ... 10 в данном случае, которое является int, а не обнуляемым int.
У вас может быть удачи с:
int? x = GetBoolValue() (int?)10 : null;
Просто добавьте явное приведение.
int? x = GetBoolValue() ? 10 : (int?)null;
Это тернарный оператор, который сбивает с толку - второй аргумент является целым числом, и поэтому третий аргумент также должен быть целым числом, и null не подходит.
Это потому, что компилятор определяет тип условного оператора по второму и третьему операндам, а не по тому, чему вы присваиваете результат. Между целым числом и нулевой ссылкой, которое компилятор может использовать для определения типа, нет прямого приведения.