Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

c# непонятки

972  
AlexNek патриот30.06.23 20:41
AlexNek
30.06.23 20:41 

Без картинки может неясно будет.

Вопрос - Какого в строке 7 нет предупреждения аналогичного строке 9?

Это как функция определяется

public static async ValueTask InvokeVoidAsync(this IJSRuntime jsRuntime, string identifier, params object?[]? args)


Еще небольшое добавление: в реальном проекте все предупреждение преобразовываются в ошибки поэтому просто скомпилировать нельзя.

Как убрать предупреждение тоже ясно, непонятно отчего разница. Ну и это просто иллюстрация проблемы.

#1 
Murr патриот30.06.23 22:23
Murr
NEW 30.06.23 22:23 
в ответ AlexNek 30.06.23 20:41

в строке 7

------

8?


непонятно отчего разница

-----

Предположительно - не совпадает количество передаваемых параметров. Допиши нулл в третью позицию.

#2 
AlexNek патриот30.06.23 23:05
AlexNek
NEW 30.06.23 23:05 
в ответ Murr 30.06.23 22:23

Уже пробовал, никаких изменений.

Предположительно, так сделали специально. Но не удается найти никаких подтверждений данной теории.

#3 
daduda свой человек01.07.23 02:16
NEW 01.07.23 02:16 
в ответ AlexNek 30.06.23 20:41, Последний раз изменено 01.07.23 02:18 (daduda)

А когда-то давно на планете Земля жили люди, которые умели пользоваться ChatGPT.


Но они вымерли.

#4 
AlexNek патриот01.07.23 12:09
AlexNek
NEW 01.07.23 12:09 
в ответ daduda 01.07.23 02:16

Видимо поэтому они и вымерли.


#5 
Wanderer_ завсегдатай01.07.23 22:43
NEW 01.07.23 22:43 
в ответ AlexNek 30.06.23 20:41

С параметрами здесь всё нормально.

Информация не полная. Реализацию метода покажите.


Просто ради интереса, другая тема: какая причина использовать Extension methods?


#6 
AlexNek патриот01.07.23 22:57
AlexNek
NEW 01.07.23 22:57 
в ответ Wanderer_ 01.07.23 22:43
Реализацию метода покажите.

Какого именно? И какое это имеет значение?


какая причина использовать Extension methods?

А что есть более лучшее предложение?

#7 
daduda свой человек02.07.23 03:50
NEW 02.07.23 03:50 
в ответ AlexNek 01.07.23 12:09

для начала с доисторических времен принято постить код в виде текста, а не в виде картинки.

#8 
AlexNek патриот02.07.23 11:11
AlexNek
NEW 02.07.23 11:11 
в ответ daduda 02.07.23 03:50
постить код в виде текста, а не в виде картинки

То бишь, некоторые динозавры совсем не понимают код в виде картинки?

А как принято постить реакцию компилятора, когда "всё нормально"?

#9 
AlexNek патриот02.07.23 11:22
AlexNek
NEW 02.07.23 11:22 
в ответ AlexNek 30.06.23 20:41

Похоже в этом направлении продвижения не будет хммм попробуем зайти с другого конца.


Во многих местах кода есть вызовы ява скриптов в форме:

JsRuntime.InvokeVoidAsync("<function name>", "<parameter>");


Всё нормально, всё работает. Но, неудобно, например, переименовать JS функцию или найти откуда она вызывается.


Как сделать это в более удобной форме?

#10 
alex445 коренной житель02.07.23 13:26
NEW 02.07.23 13:26 
в ответ AlexNek 02.07.23 11:22

1. Иметь джаваскритовую функцию в виде C# объекта, чтобы потом можно было применить оператор nameof.

2. После переименования сделать полнотекстовый поиск по коду с именем функции, и произвести замены вручную.

#11 
alex445 коренной житель02.07.23 13:30
NEW 02.07.23 13:30 
в ответ alex445 02.07.23 13:26, Последний раз изменено 02.07.23 13:32 (alex445)

Тут чел предлагает вставлять в имена функций куски сишарповского кода:


function afterClientCheck_<%= ClientID %>(sender, eventArgs) {}


Наверное, так можно и вообще всё имя вставить - не проверял. Как и будет ли это работать в том же Блейзоре. Типа, заводишь шарповскую строку с именем функции, и вставляешь в джаваскрипт как полное имя js-функции. Тогда при переименовании и имя функции будет заменено. Но это надо, насколько я понимаю, весь такой js-код держать в сишарповских файлах - типа разметки контролов, компонентов и т.п.

#12 
AlexNek патриот02.07.23 13:44
AlexNek
NEW 02.07.23 13:44 
в ответ alex445 02.07.23 13:30

интересно, но лучше функцию написать правильно. Выглядит как извращение.

#13 
AlexNek патриот02.07.23 13:47
AlexNek
NEW 02.07.23 13:47 
в ответ alex445 02.07.23 13:26

1,2 - ну вроде все реализации можно привести к данной формуле.

Пример имплементации можно?

#14 
alex445 коренной житель02.07.23 16:14
NEW 02.07.23 16:14 
в ответ AlexNek 02.07.23 13:47, Последний раз изменено 02.07.23 16:15 (alex445)

По пункту 1 не знаю. Я думал, там есть что-то такое из коробки. По пункту 2 всё банально же - find-replace. Чтобы было проще искать, можно добавлять к именам js-функций префиксы, типа jsMyFunction.


А что, хвалёный Решарпер не умеет отслеживать js-функции и автоматически их переименовывать? И за что народ только деньги платит... )))

#15 
AlexNek патриот02.07.23 16:23
AlexNek
NEW 02.07.23 16:23 
в ответ alex445 02.07.23 16:14

ну так естественно пункт 1 и интересует


Решарпер не умеет отслеживать js-функции

предложите способ отслеживания, особенно интересует пункт как отличить техт в строке от имени функции.

#16 
Wanderer_ завсегдатай02.07.23 19:09
NEW 02.07.23 19:09 
в ответ AlexNek 01.07.23 22:57
Какого именно? И какое это имеет значение?

InvokeVoidAsync(...)

Если там нет await, то имеет.


какая причина использовать Extension methods?
А что есть более лучшее предложение?

Например просто реализовать как статический метод класса. Хотя я не вижу какие задачи этим решаются, трудно судить.

#17 
AlexNek патриот02.07.23 20:45
AlexNek
NEW 02.07.23 20:45 
в ответ Wanderer_ 02.07.23 19:09

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?

#18