c# непонятки
Без картинки может неясно будет.
Вопрос - Какого в строке 7 нет предупреждения аналогичного строке 9?
Это как функция определяется
public static async ValueTask InvokeVoidAsync(this IJSRuntime jsRuntime, string identifier, params object?[]? args)
Еще небольшое добавление: в реальном проекте все предупреждение преобразовываются в ошибки поэтому просто скомпилировать нельзя.
Как убрать предупреждение тоже ясно, непонятно отчего разница. Ну и это просто иллюстрация проблемы.
Похоже в этом направлении продвижения не будет попробуем зайти с другого конца.
Во многих местах кода есть вызовы ява скриптов в форме:
JsRuntime.InvokeVoidAsync("<function name>", "<parameter>");
Всё нормально, всё работает. Но, неудобно, например, переименовать JS функцию или найти откуда она вызывается.
Как сделать это в более удобной форме?
Тут чел предлагает вставлять в имена функций куски сишарповского кода:
function afterClientCheck_<%= ClientID %>(sender, eventArgs) {}
Наверное, так можно и вообще всё имя вставить - не проверял. Как и будет ли это работать в том же Блейзоре. Типа, заводишь шарповскую строку с именем функции, и вставляешь в джаваскрипт как полное имя js-функции. Тогда при переименовании и имя функции будет заменено. Но это надо, насколько я понимаю, весь такой js-код держать в сишарповских файлах - типа разметки контролов, компонентов и т.п.
По пункту 1 не знаю. Я думал, там есть что-то такое из коробки. По пункту 2 всё банально же - find-replace. Чтобы было проще искать, можно добавлять к именам js-функций префиксы, типа jsMyFunction.
А что, хвалёный Решарпер не умеет отслеживать 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?