powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / IntelliSense для Func<> Action<> ?
25 сообщений из 77, страница 1 из 4
IntelliSense для Func<> Action<> ?
    #38843343
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сделать, чтобы IntelliSense показывал мои заданные имена для параметров, а не arg1, arg2, arg3.... не красиво ведь !
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843345
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто очень глаза режет. Сильно снижает ценность от Func<>
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843347
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример функции
Код: c#
1.
2.
Func<string, bool> MyFunc = ((name) => { return true; });
MyFunc () << IntelliSense покажет arg1 а не name !
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843357
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        /// <summary>
        /// sdf
        /// </summary>
        /// <param name="s1">sdf</param>
        /// <param name="s2">sdf</param>
        /// <param name="s3">sdf</param>
        /// <param name="s4">sdf</param>
        /// <returns></returns>
        private static bool MyMethod(string s1, string s2, string s3, string s4)
        {
            return false;
        }



тоже не помогает
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843393
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekПросто очень глаза режет. Сильно снижает ценность от Func<>

Галаза режит говриш...
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843397
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не критичная проблема, но можно было бы и запилить её. Видимо разрабы забили.
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843430
Awaiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУНе критичная проблема, но можно было бы и запилить её. Видимо разрабы забили.

Ну не скажите :( В методе из 5-ти параметров (особенно если они одно-типные) уже неприятно. Приходится быть внимательней или не пользоваться.
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843433
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНе критичная проблема, но можно было бы и запилить её. Видимо разрабы забили.

ничего они не забыли, делегату пох чего ему там присвоили
к тому же, сдаётся мне, что это баян
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843447
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
++
обыкновенный делегат который инициализируется по месту указателем на ф. или на ранее созданную.
можно удирать по нему F12 и посмотреть как он объявлен в методанных.
если уже невтерпеж, можно сделать своё объявление - "перекрыть"
delegate TResult Func<in T, out TResult>(T myArg);
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843586
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekКак сделать, чтобы IntelliSense показывал мои заданные имена для параметров, а не arg1, arg2, arg3.... не красиво ведь !
Переходи на F#, он легко разруливает такие штуки!
Код: c#
1.
2.
3.
4.
let f (a:double, b:double) = 
    a * b
f (3.0, 7.2) |>
System.Console.WriteLine
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843819
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я выходец из Дельфи.

Мои эксперименты в массовом использовании Func<> Action<> заключались в попытке перенести из мира Дельфи "встроенные функции". Очень жаль, что аналогов в C# нету. Func и Action могли бы стать отличнейшей заменой ! Правда есть огромные сомнения в производительности, что и вынудило отказаться от идеи.
Кто знает ? Func и Action создают новый класс для каждой лямбды или встраивают метод в класс в котором были объявлены ?
Т.е. в таком коде:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class MyClass
{
  public void Method ()
  {
     Func <int, bool> func1 ....
     Func <str, str> func2....
     Action <int>  act1....
  }
}


Компилятор на выходе создаст 3 отдельных класса + MyClass?

Благодаря вложенным функциям, в Дельфи было легко и приятно писать "Как Мартин Фаулер завещал" (здоровья ему :) ) - по максимуму вынося весь код в подфункции.
Да, можно создать отдельный класс и создавать в нем приватные функции. Но есть масса примеров, когда вынесение кода в функцию класса не практично. Примеры - проверка входных параметров, различные валидации внутри функции, маппирование объектов. Все это можно вынести в отдельные функции, но что если функции нужно СТРОГО И ТОЛЬКО в данной функции ?

Например проверка входных параметров в функцию контроллера Asp.net MVC. Приходит 15ть параметров модели, которые нужно проверить. Выносить в отдельную функцию бесмысленно. Чтобы не замусоривать класс, т.к. эти входные параметры строго индивидуальны для данного метода.
В Дельфи подобное легко оформлялось в подфункции.
В C# придется делать приватный метод и визуально захламлять интерфейс контроллера. В итоге вместо 5 методов контроллера + 2,3 приватных общих, получаем 20 методов, из которых 15 используются строго в одном методе. Есть разница ? :) Не получится писать красивый код, состоящий из сплошных вызовов подфункций.
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843834
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
  public class MyClass
    {
        public void Method()
        {
            Func<int, bool> func1 = i => i > 0;
            Func<string, string> func2 = s => s;
            Action<int> act1 = i => i++;
        }
    }


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
using System;
using System.Runtime.CompilerServices;
namespace ConsoleApplication1
{
	public class MyClass
	{
		[CompilerGenerated]
		private static Func<int, bool> CS$<>9__CachedAnonymousMethodDelegate3;
		[CompilerGenerated]
		private static Func<string, string> CS$<>9__CachedAnonymousMethodDelegate4;
		[CompilerGenerated]
		private static Action<int> CS$<>9__CachedAnonymousMethodDelegate5;
		public void Method()
		{
			if (MyClass.CS$<>9__CachedAnonymousMethodDelegate3 == null)
			{
				MyClass.CS$<>9__CachedAnonymousMethodDelegate3 = new Func<int, bool>(MyClass.<Method>b__0);
			}
			Func<int, bool> cS$<>9__CachedAnonymousMethodDelegate = MyClass.CS$<>9__CachedAnonymousMethodDelegate3;
			if (MyClass.CS$<>9__CachedAnonymousMethodDelegate4 == null)
			{
				MyClass.CS$<>9__CachedAnonymousMethodDelegate4 = new Func<string, string>(MyClass.<Method>b__1);
			}
			Func<string, string> cS$<>9__CachedAnonymousMethodDelegate2 = MyClass.CS$<>9__CachedAnonymousMethodDelegate4;
			if (MyClass.CS$<>9__CachedAnonymousMethodDelegate5 == null)
			{
				MyClass.CS$<>9__CachedAnonymousMethodDelegate5 = new Action<int>(MyClass.<Method>b__2);
			}
			Action<int> cS$<>9__CachedAnonymousMethodDelegate3 = MyClass.CS$<>9__CachedAnonymousMethodDelegate5;
		}
		[CompilerGenerated]
		private static bool <Method>b__0(int i)
		{
			return i > 0;
		}
		[CompilerGenerated]
		private static string <Method>b__1(string s)
		{
			return s;
		}
		[CompilerGenerated]
		private static void <Method>b__2(int i)
		{
			i++;
		}
	}
}
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843842
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekЯ выходец из Дельфи.

Мои эксперименты в массовом использовании Func<> Action<> заключались в попытке перенести из мира Дельфи "встроенные функции". Очень жаль, что аналогов в C# нету. Func и Action могли бы стать отличнейшей заменой ! Правда есть огромные сомнения в производительности, что и вынудило отказаться от идеи.
Кто знает ? Func и Action создают новый класс для каждой лямбды или встраивают метод в класс в котором были объявлены ?
Т.е. в таком коде:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class MyClass
{
  public void Method ()
  {
     Func <int, bool> func1 ....
     Func <str, str> func2....
     Action <int>  act1....
  }
}


Компилятор на выходе создаст 3 отдельных класса + MyClass?

Благодаря вложенным функциям, в Дельфи было легко и приятно писать "Как Мартин Фаулер завещал" (здоровья ему :) ) - по максимуму вынося весь код в подфункции.
Да, можно создать отдельный класс и создавать в нем приватные функции. Но есть масса примеров, когда вынесение кода в функцию класса не практично. Примеры - проверка входных параметров, различные валидации внутри функции, маппирование объектов. Все это можно вынести в отдельные функции, но что если функции нужно СТРОГО И ТОЛЬКО в данной функции ?

Например проверка входных параметров в функцию контроллера Asp.net MVC. Приходит 15ть параметров модели, которые нужно проверить. Выносить в отдельную функцию бесмысленно. Чтобы не замусоривать класс, т.к. эти входные параметры строго индивидуальны для данного метода.
В Дельфи подобное легко оформлялось в подфункции.
В C# придется делать приватный метод и визуально захламлять интерфейс контроллера. В итоге вместо 5 методов контроллера + 2,3 приватных общих, получаем 20 методов, из которых 15 используются строго в одном методе. Есть разница ? :) Не получится писать красивый код, состоящий из сплошных вызовов подфункций.

Рекомендую побольше почитать на эту тему (как с этим дела в Delphi, не знаю).
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843844
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Великолепно !!!

Значит, все таки Func и Action можно использовать как замену вложенным функциям !! Компилятор обернул все так как и нужно - в статические методы.
В принципе, я на это надеялся :) Верил, что разработчики не глупы.

Остается проблема, описанная в топике... :) Что IntelliSense не выводит нормальные имена.
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843846
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ilya81,

Паттерны я знаю :)
Вопрос стоял о читаемости кода, а это уже Мартин Фаулер с идеей минимальных и читабельных методов.
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843850
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
вас не смущает что это делегаты, и иницализируются они простыми указателями ?
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843852
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

А что должно смущать ? Типобезопасность ?
То, что это делегаты, инициализирующиеся указателями на функции - так это же и отлично. Производительность максимальна.

В чем проблема ? :)
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843853
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekЕвгенийВ,

Великолепно !!!

Значит, все таки Func и Action можно использовать как замену вложенным функциям !! Компилятор обернул все так как и нужно - в статические методы.
В принципе, я на это надеялся :) Верил, что разработчики не глупы.

Остается проблема, описанная в топике... :) Что IntelliSense не выводит нормальные имена.
Так сделай статический класс и помести туда нужные тебе методы, смотри например класс Math.
Хотя многие делфисты не в курсе, что у них статические методы и class procedure/function, что для меня было шоком.

C# полностью (почти) ОО язык, забудь про процедурное программирование и методы вне класса!
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843857
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekIlya81,

Паттерны я знаю :)
Вопрос стоял о читаемости кода, а это уже Мартин Фаулер с идеей минимальных и читабельных методов.
Ну так используйте Helper (или Decorator, или ещё что, что больше подходит к задаче). Ничего нового здесь придумывать не надо, всё уже придумано.
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843860
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Так я об этом и говорю, что вынесение метода в приватный метод - ЗАМУСОРИВАЕТ код. Мы выносим метод в общий интерфейс класса, который используется лишь одним единственным методом.
Или вы предлагаете на каждый метод создавать отдельный класс ? Будет головняк с общими методами. Придется делать иерархию классов и выносить общие методы в базовых класс... Кхм, отличная альтернатива вложенным функциям ;)

Не знаю, что за дельфисты не знают, что class function/procedure это синоним статической функции, разве что студенты может быть ? :)
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843863
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
проблема в вашей "читаемости" и причем тут читаемость? тип делегата и название аргумента задается при объявлении
делегата, но не как при его инициализации, мало того может быть ветвленная инициализация разными функциями
с разным названием аргуметов, и что вы там замечтаете увидеть в intelisense ?
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843868
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekЕвгенийВ,

Так я об этом и говорю, что вынесение метода в приватный метод - ЗАМУСОРИВАЕТ код. Мы выносим метод в общий интерфейс класса, который используется лишь одним единственным методом.
Или вы предлагаете на каждый метод создавать отдельный класс ? Будет головняк с общими методами. Придется делать иерархию классов и выносить общие методы в базовых класс... Кхм, отличная альтернатива вложенным функциям ;)

Не знаю, что за дельфисты не знают, что class function/procedure это синоним статической функции, разве что студенты может быть ? :)

Зачем отдельный класс на каждый метод - объединяйте схожие по назначению методы в статические классы, а классы в namespace'ы - по мне вполне логичная иерархия вспомогательных функций. При этом желательно учитывать используемые в них типы данных (принципы, одно из названий которых - S.O.L.I.D).
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843873
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekНе знаю, что за дельфисты не знают, что class function/procedure это синоним статической функции, разве что студенты может быть ? :)
Есть отличия? Если есть то в чем?
Код: pascal
1.
class function Proc(Param: Pointer): DWord; stdcall;


Код: pascal
1.
class function Proc(Param: Pointer): DWord; stdcall; static;
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843892
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ
Код: pascal
1.
class function Proc(Param: Pointer): DWord; stdcall;


Код: pascal
1.
class function Proc(Param: Pointer): DWord; stdcall; static;



Нинаю :)
...
Рейтинг: 0 / 0
IntelliSense для Func<> Action<> ?
    #38843896
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Часто вы этим пользуетесь ? :)
Я не претендую на гуру.
...
Рейтинг: 0 / 0
25 сообщений из 77, страница 1 из 4
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / IntelliSense для Func<> Action<> ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]