powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# Func generic
34 сообщений из 34, показаны все 2 страниц
c# Func generic
    #39077314
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Хочу задать вопрос из любопытства. Просто очень интересно возможна ли данная реализация.

Имеется дженерик функция:
Код: c#
1.
public string function GetTypeMy<T>(T value) {};



Можно ли данную функцию объявить средствами Func<T>, типа этого:
Код: c#
1.
public Func<T, string> Pe() = (p => p);
...
Рейтинг: 0 / 0
c# Func generic
    #39077323
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoИмеется дженерик функция:
Код: c#
1.
public string function GetTypeMy<T>(T value) {};

не имеется, она должна возвращать значение

NechtoМожно ли данную функцию объявить средствами Func<T>, типа этого:
Код: c#
1.
public Func<T, string> Pe() = (p => p);

типа этого - это вот так?
Код: c#
1.
public Func<string, string> Pe = p => p
...
Рейтинг: 0 / 0
c# Func generic
    #39077349
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProNechtoИмеется дженерик функция:
Код: c#
1.
public string function GetTypeMy<T>(T value) {};

не имеется, она должна возвращать значение

NechtoМожно ли данную функцию объявить средствами Func<T>, типа этого:
Код: c#
1.
public Func<T, string> Pe() = (p => p);

типа этого - это вот так?
Код: c#
1.
public Func<string, string> Pe = p => p



Спасибо! А то были сомнения в невозможности реализации.
...
Рейтинг: 0 / 0
c# Func generic
    #39077368
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так и не понял, за что спасибо, ну да ладно )
...
Рейтинг: 0 / 0
c# Func generic
    #39077381
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще то как то так.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 public static string  GetTypeMy<T>(T value)
        {
            return "1";
        }
        Func<T, string> fun = x => GetTypeMy<T>(x);//так низя, T - непонятно что
        Func<int, string> fun1 = x => GetTypeMy(10);//так можно, T - int
        public interface IMy { }
        public class CMy : IMy { }
        Func<IMy, string> fun2 = x => GetTypeMy(new CMy());// так можно начиная с .NET 4.0 ибо в Func<T, TResult> T -ковариантный TResult - контрвариантный
        public class CMy1<T>
        {
            Func<T, string> fun = x => GetTypeMy(x);// так можно, T обобщенный параметр класса
        }
...
Рейтинг: 0 / 0
c# Func generic
    #39077437
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Func это указатель на метод, а не сам метод, не понял, что хочет автор?
вернуть указатель на функцию?
...
Рейтинг: 0 / 0
c# Func generic
    #39077577
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesFunc это указатель на метод, а не сам метод, не понял, что хочет автор?
вернуть указатель на функцию?
Func - обобщенный делегат с параметрами ковариантного ковариантного типа и контрвариантным возвращаемым значением.
...
Рейтинг: 0 / 0
c# Func generic
    #39077748
EV.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как же так??? А как же я???

Допустим, гадо написать функцию, которая выполняет какую-нибудь логическую операцию над двумя операндами в соответствии с той операцией, которая занесена в строку. Я попытался сделать как ниже, но так не получилось. Выдаётся сообщение "Оператор вида “>” не может применяться к операндам вида <T> и <T>".

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
private bool cmpStr<T>(string s, T c1, T c2)
{
    if (s == ">") return c1 > c2;
    else if (s == ">=") return c1 >= c2;
    else if (s == "==") return c1 == c2;
    else if (s == "<=") return c1 <= c2;
    else if (s == "<") return c1 < c2;
    else return false;
}



Собственно, проблема в том, что generic имеет тут явные ограничения не может применяться для сравнения объектов. И поэтому придётся корячиться и писать что-то вроде:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
cmpStr<T>(string s, T c1, T c2) where T : MyType

public class MyType 
{
    public int Value;

    public static bool operator <(MyType  a1, MyType a2)
    {
        return a1.Value < a2.Value;
    }

    public static bool operator >(MyType a1, MyType a2)
    {
        return a1.Value > a2.Value;
    }

    ...
}



Так? Так!
...
Рейтинг: 0 / 0
c# Func generic
    #39077764
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот не надо вот методом тыка все делать.

Во-первых, изучите разницу между ссылочными типами и структурами
Во-вторых, изучите компараторы, интерфейс IComparable и т.п.

Это слишком длинно, чтобы изложить в одном посте, но в любом учебнике это есть.
После прочтения вопросы отпадут.
...
Рейтинг: 0 / 0
c# Func generic
    #39077828
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EV.P
Так? Так!
Согласен, разработчики C# могли бы разрешить использование операторов в таких случаях или в качестве ограничений на generic аргументы. И вообще этот язык сейчас используют только старые и ленивые программисты, которые не в состоянии научиться новому и прогрессивному!

Например в самом современном и прогрессивном языке F# делают так!
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
module MyTest

let cmpStr s c1 c2 =
    match s with
    | ">" -> c1 > c2
    | ">=" -> c1 >= c2
    | "=" -> c1 = c2
    | "<=" -> c1 <= c2
    | "<" -> c1 < c2
    | _ -> false

let r1 = MyTest.cmpStr ">" 1 "w"//IDE и компилятор ругаются, тут к int и string нельзя применить Basic Comparison Operations
let r2 = MyTest.cmpStr "<" 1 2//тут все хорошо!
...
Рейтинг: 0 / 0
c# Func generic
    #39077841
EV.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Странно, но у меня что-то стал глючить сам компилятор .Net.
Вот код, который прекрасно компилируется и даже кое-как работает!

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
class Program
    {
        static void Main(string[] args)
        {
         
        }

        class Poezd
        {
            private int poezd = "туту!";
            
            public Poezd():this(5)
            {
                
            }

            public Poezd(int i):this()
            {
                
            }
        }

    }



Я думаю, что проблема тут в том, что .Net предусматривает неявную типизацию, определяемую ключевым словом var, которое пытались сделать полем класса. Так?
...
Рейтинг: 0 / 0
c# Func generic
    #39077847
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EV.P,
Какие C# Compiler Options использовал при компиляции?
...
Рейтинг: 0 / 0
c# Func generic
    #39078478
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВRoman MejtesFunc это указатель на метод, а не сам метод, не понял, что хочет автор?
вернуть указатель на функцию?
Func - обобщенный делегат с параметрами ковариантного ковариантного типа и контрвариантным возвращаемым значением.
ну да, а делегат значит не указатель не метод? :)
просто если человек просит о помощи, слово делегат, вызывает у него еще 100500 вопросов
...
Рейтинг: 0 / 0
c# Func generic
    #39078561
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesпросто если человек просит о помощи, слово делегат, вызывает у него еще 100500 вопросов
С простым указателем на метод такое например проканает?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
Func<int> fun = () => 4;
            var x2 = fun.DynamicInvoke();
            var x3 = fun();
            var x4 = fun.BeginInvoke(async => 
            {
                var x5 = (async.AsyncState as Func<int>).EndInvoke(async);
            }, fun);
            fun += () => 7;
            var x1 = fun.GetInvocationList().OfType<Func<int>>().Select(z => z());
...
Рейтинг: 0 / 0
c# Func generic
    #39079285
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВEV.PТак? Так!
Согласен, разработчики C# могли бы разрешить использование операторов в таких случаях или в качестве ограничений на generic аргументы. И вообще этот язык сейчас используют только старые и ленивые программисты, которые не в состоянии научиться новому и прогрессивному!

Например в самом современном и прогрессивном языке F# делают так!
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
module MyTest

let cmpStr s c1 c2 =
    match s with
    | ">" -> c1 > c2
    | ">=" -> c1 >= c2
    | "=" -> c1 = c2
    | "<=" -> c1 <= c2
    | "<" -> c1 < c2
    | _ -> false

let r1 = MyTest.cmpStr ">" 1 "w"//IDE и компилятор ругаются, тут к int и string нельзя применить Basic Comparison Operations
let r2 = MyTest.cmpStr "<" 1 2//тут все хорошо!



Евгений, и в чем же его F# прогресcивность? Строгая типизация, так это уже и в паскале было.
...
Рейтинг: 0 / 0
c# Func generic
    #39079876
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechto
Евгений, и в чем же его F# прогресcивность? Строгая типизация, так это уже и в паскале было.
При чем тут строгая типизация?
В F# более мощная система типов и еще много всяких вкусностей.
...
Рейтинг: 0 / 0
c# Func generic
    #39082286
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВNechtoЕвгений, и в чем же его F# прогресcивность? Строгая типизация, так это уже и в паскале было.
При чем тут строгая типизация?
В F# более мощная система типов и еще много всяких вкусностей.

Синтаксис языка какой-то не привычный. Хотя это дело привычки. Нужно будет попробовать, его в действии.
...
Рейтинг: 0 / 0
c# Func generic
    #39082292
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ... использование операторов ...Макросы ещё надо как в C/C++, чтобы все окончательно запутались.
...
Рейтинг: 0 / 0
c# Func generic
    #39082331
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМакросы ещё надо как в C/C++, чтобы все окончательно запутались.
Нафига макросы, когда можно нормальный DSL делать, как тут например .
...
Рейтинг: 0 / 0
c# Func generic
    #39082389
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВАлексей КМакросы ещё надо как в C/C++, чтобы все окончательно запутались.
Нафига макросы, когда можно нормальный DSL делать, как тут например .
хабр
авторНачнем с того, что обсудим что же такое DSL. DSL – доменно специфичный язык – то есть способ описания той или иной предметной специфики (которая часто связана с конкретной индустрией) с помощью такого языка, который могут понять не только разработчики, но и эксперты в предметной области. Важно в этом языке то, что те кто его используют не должны думать о фигурных скобочках, точках с запятой и прочих прелестях программирования. То есть у них должна быть возможность писать на «простом английском» (русском, японском, и т.д.)Опять несбыточная мечта о программировании непрограммистами. Неудобного SQL и без того хватает.
...
Рейтинг: 0 / 0
c# Func generic
    #39082512
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КОпять несбыточная мечта о программировании непрограммистами. Неудобного SQL и без того хватает.
На SQL программируют непрограммисты?
...
Рейтинг: 0 / 0
c# Func generic
    #39082514
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныАлексей КОпять несбыточная мечта о программировании непрограммистами. Неудобного SQL и без того хватает.
На SQL программируют непрограммисты?По факту нет. Но цели при создании были такими же. Вики :
авторЦелью разработки было создание простого непроцедурного языка, которым мог воспользоваться любой пользователь, даже не имеющий навыков программирования.
...
Рейтинг: 0 / 0
c# Func generic
    #39082515
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы: История людей ничему не учит.
...
Рейтинг: 0 / 0
c# Func generic
    #39083236
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПо факту нет. Но цели при создании были такими же.
Ну и само определение программиста размыто. Для кого то это всякий, кто может переставить Windows, для меня это люди масштаба Кодда, Кнута, Хесберга или Страуструпа со Степановым.
...
Рейтинг: 0 / 0
c# Func generic
    #39083282
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВАлексей КПо факту нет. Но цели при создании были такими же.
Ну и само определение программиста размыто. Для кого то это всякий, кто может переставить Windows, для меня это люди масштаба Кодда, Кнута, Хесберга или Страуструпа со Степановым.
при этом совсем не факт, что они себя при этом считали программистами :)
...
Рейтинг: 0 / 0
c# Func generic
    #39083290
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВАлексей КПо факту нет. Но цели при создании были такими же.
Ну и само определение программиста размыто. Для кого то это всякий, кто может переставить Windows, для меня это люди масштаба Кодда, Кнута, Хесберга или Страуструпа со Степановым. Инженер-программист
...
Рейтинг: 0 / 0
c# Func generic
    #39083491
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К Инженер-программист [/quot]
тухта! одна эта строчка чего стоит.
http://www.rabotka.ru/ Высшее техническое или инженерно-экономическое образование.
...
Рейтинг: 0 / 0
c# Func generic
    #39126660
fivedod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВ, может тут конкретнее написано?
...
Рейтинг: 0 / 0
c# Func generic
    #39126686
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fivedod,
гы - хорошей моторикой пальцев
add- ленивостью + цинизмом..
...
Рейтинг: 0 / 0
c# Func generic
    #39158304
EV.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен. Именно так всё и оказалось.
Как я и говорил, дальше будет только хуже. Чудес ведь не бывает. Так? Так!
...
Рейтинг: 0 / 0
c# Func generic
    #39160245
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoЗдравствуйте!

Хочу задать вопрос из любопытства. Просто очень интересно возможна ли данная реализация.

Имеется дженерик функция:
Код: c#
1.
public string function GetTypeMy<T>(T value) {};



Можно ли данную функцию объявить средствами Func<T>, типа этого:
Код: c#
1.
public Func<T, string> Pe() = (p => p);



Зависит от версии языка. В C# 6 можно сделать так:
Код: c#
1.
public override string ToString() => string.Format("{0}, {1}", First, Second);
...
Рейтинг: 0 / 0
c# Func generic
    #39160273
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LameUserможно сделать так:
Код: c#
1.
public override string ToString() => string.Format("{0}, {1}", First, Second);


Если уж шестерка, тогда
Код: c#
1.
   public override string ToString() => $"{First} {Second}";
...
Рейтинг: 0 / 0
c# Func generic
    #39160916
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВLameUserможно сделать так:
Код: c#
1.
public override string ToString() => string.Format("{0}, {1}", First, Second);


Если уж шестерка, тогда
Код: c#
1.
   public override string ToString() => $"{First} {Second}";



Код взят из ссылки с сайта микрософта без изменений (чтобы легче было найти по поиску).
...
Рейтинг: 0 / 0
c# Func generic
    #39160952
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LameUser
Код взят из ссылки с сайта микрософта без изменений (чтобы легче было найти по поиску).
Там про CTP3, нужно читать более свежее :)
https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C#-6
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# Func generic
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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