c# непонятки
Без картинки может неясно будет.
Вопрос - Какого в строке 7 нет предупреждения аналогичного строке 9?
Это как функция определяется
public static async ValueTask InvokeVoidAsync(this IJSRuntime jsRuntime, string identifier, params object?[]? args)
Еще небольшое добавление: в реальном проекте все предупреждение преобразовываются в ошибки поэтому просто скомпилировать нельзя.
Как убрать предупреждение тоже ясно, непонятно отчего разница. Ну и это просто иллюстрация проблемы.
в строке 7
------
8?
непонятно отчего разница
-----
Предположительно - не совпадает количество передаваемых параметров. Допиши нулл в третью позицию.
Уже пробовал, никаких изменений.
Предположительно, так сделали специально. Но не удается найти никаких подтверждений данной теории.
С параметрами здесь всё нормально.
Информация не полная. Реализацию метода покажите.
Просто ради интереса, другая тема: какая причина использовать Extension methods?
Реализацию метода покажите.
Какого именно? И какое это имеет значение?
какая причина использовать Extension methods?
А что есть более лучшее предложение?
для начала с доисторических времен принято постить код в виде текста, а не в виде картинки.
постить код в виде текста, а не в виде картинки
То бишь, некоторые динозавры совсем не понимают код в виде картинки?
А как принято постить реакцию компилятора, когда "всё нормально"?
Похоже в этом направлении продвижения не будет попробуем зайти с другого конца.
Во многих местах кода есть вызовы ява скриптов в форме:
JsRuntime.InvokeVoidAsync("<function name>", "<parameter>");
Всё нормально, всё работает. Но, неудобно, например, переименовать JS функцию или найти откуда она вызывается.
Как сделать это в более удобной форме?
1. Иметь джаваскритовую функцию в виде C# объекта, чтобы потом можно было применить оператор nameof.
2. После переименования сделать полнотекстовый поиск по коду с именем функции, и произвести замены вручную.
Тут чел предлагает вставлять в имена функций куски сишарповского кода:
function afterClientCheck_<%= ClientID %>(sender, eventArgs) {}
Наверное, так можно и вообще всё имя вставить - не проверял. Как и будет ли это работать в том же Блейзоре. Типа, заводишь шарповскую строку с именем функции, и вставляешь в джаваскрипт как полное имя js-функции. Тогда при переименовании и имя функции будет заменено. Но это надо, насколько я понимаю, весь такой js-код держать в сишарповских файлах - типа разметки контролов, компонентов и т.п.
интересно, но лучше функцию написать правильно. Выглядит как извращение.
По пункту 1 не знаю. Я думал, там есть что-то такое из коробки. По пункту 2 всё банально же - find-replace. Чтобы было проще искать, можно добавлять к именам js-функций префиксы, типа jsMyFunction.
А что, хвалёный Решарпер не умеет отслеживать js-функции и автоматически их переименовывать? И за что народ только деньги платит... )))
ну так естественно пункт 1 и интересует
Решарпер не умеет отслеживать js-функции
предложите способ отслеживания, особенно интересует пункт как отличить техт в строке от имени функции.
Какого именно? И какое это имеет значение?
InvokeVoidAsync(...)
Если там нет await, то имеет.
какая причина использовать Extension methods?
А что есть более лучшее предложение?
Например просто реализовать как статический метод класса. Хотя я не вижу какие задачи этим решаются, трудно судить.
InvokeVoidAsync(...) - метод то не мой, а микрософтовский
Если там нет await, то имеет. Достаточно того что в описании есть async.
Вот вытащил, ради интереса можно убрать await и глянуть изменения.
public static async ValueTask InvokeVoidAsync(this IJSRuntime jsRuntime, string identifier, params object?[]? args) { if (jsRuntime is null) { throw new ArgumentNullException(nameof(jsRuntime)); } await jsRuntime.InvokeAsync<IJSVoidResult>(identifier, args); }
Например просто реализовать как статический метод класса
и что получим в результате?
MySuperPuperClass.SetFocusAsync(JsRuntime,"saveButton")
Сравниваем с этим +intellisence бесплатно.
JsRuntime.SetFocusAsync("saveButton")
Чем не нравится Extension method?