powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запуск Visual Studio 2017
25 сообщений из 82, страница 3 из 4
Запуск Visual Studio 2017
    #39420622
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВАлексей Кпропущено...
Что это?
Что то типа этого .Не понравилось.
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420624
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВhVosttПока что приходится использовать атрибуты [NotNull], [CanBeNull], [ItemNotNull], [ItemCanBeNull]. Выглядит уродски, но приходится мириться, так как эти атрибуты экономят просто огроменное количество времени, убивая возможные NullReferenceException в зародыше. И кодить гораздо комфортней.
А подробнее?

Код: c#
1.
2.
3.
4.
5.
[NotNull]
public SomeResult SomeFunc([NotNull] string arg1, [CanBeNull] string arg2)
{
   ...
}




Теперь:

1. При анализе реализации функции SomeFunc:

1.1. мы сразу видим проблему если возвращается null
1.2. мы сразу видим проблему, если используем arg2 и не проверяем на null

2. При анализе вызовов SomeFunc:

2.1. не надо проверять полученное значение на null
2.2. мы сразу видим проблему, если передаём в качестве arg1 null

Если использовать это повсеместно, то накосячить очень трудно. Анализатор не пропустит даже на компиляцию.
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420625
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНе понравилось.

Почему?
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420629
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

А хотелось бы писать так:

Код: c#
1.
2.
3.
4.
public SomeResult ! SomeFunc(string ! arg1, string ? arg2)
{
   ...
}



Подсвеченное нигде не описано, но это уж совсем было бы хорошо )
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420640
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КНе понравилось.

Почему?Не вижу практических задач, где это настолько востребовано, чтобы выносить данные возможности на уровень языка. Есть опасения, что в перспективе C# превратится в помойку, содержащую массу ненужных возможностей.

Лучше бы сделали что-то действительно полезное. Например, возможность использования анонимных классов за пределами одного метода или добавили бы синтаксический сахар для описания таких конструкций:
Код: c#
1.
static readonly Expression<Func<MyClass, int>> MyExpression = o => o.Value;
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420644
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНе вижу практических задач, где это настолько востребовано, чтобы выносить данные возможности на уровень языка.

У нас полно таких задач. Они появляются, когда задачи становятся сложнее чем банальное CRUD приложение. Вот просто для примера, мы заменили наш код на новые конструкции языка в десятке классов. Общее количество строк уменьшилось где-то на 10-15%, без изменения логики. Код стал выразительнее.
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420646
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНапример, возможность использования анонимных классов за пределами одного метода

И как ты подставишь анонимный класс в параметры метода, не потеряв типизацию? Просто логически подумай. Тут дело не в том, что они не хотят сделать такую возможность. Эта задача не решаема.
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420648
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

С другой стороны, добавили кортежи, это решает твою проблему с анонимными классами. Есть кортежи с именованными полями, их можно возвращать и передавать, не объявляя новых классов.
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420657
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КНапример, возможность использования анонимных классов за пределами одного метода

И как ты подставишь анонимный класс в параметры метода, не потеряв типизацию? Просто логически подумай. Тут дело не в том, что они не хотят сделать такую возможность. Эта задача не решаема.В TypeScript эта задача решена. Было бы желание.
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420661
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей К,

С другой стороны, добавили кортежи, это решает твою проблему с анонимными классами. Есть кортежи с именованными полями, их можно возвращать и передавать, не объявляя новых классов.Мне это нужно для использования в EntityFramework, чтобы не было необходимости описывать классы, под возвращаемые запросами данные.
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420680
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВ TypeScript эта задача решена. Было бы желание.

Не решена, там другая платформа и другая парадигма. Не надо заливать.
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420684
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМне это нужно для использования в EntityFramework, чтобы не было необходимости описывать классы, под возвращаемые запросами данные.

Это понятно, но это нельзя сделать в типизированном языке в принципе.

Код: c#
1.
var queryResult = SomeService.SelectToAnonymousResult();



Откуда вызывающей стороне знать что там возвращается изнутри SelectToAnonymousResult? На уровне интерфейса SomeService? Как ты предлагаешь этот интерфейс описать? Ты можешь вернуть IEnumerable<dynamic> и работать с этим как в JavaScript, кто мешает?
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420739
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КМне это нужно для использования в EntityFramework, чтобы не было необходимости описывать классы, под возвращаемые запросами данные.

Это понятно, но это нельзя сделать в типизированном языке в принципе.

Код: c#
1.
var queryResult = SomeService.SelectToAnonymousResult();



Откуда вызывающей стороне знать что там возвращается изнутри SelectToAnonymousResult? На уровне интерфейса SomeService? Как ты предлагаешь этот интерфейс описать? Ты можешь вернуть IEnumerable<dynamic> и работать с этим как в JavaScript, кто мешает?Вывести тип, возвращаемый методом, можно, в TypeScript это реализовано. Придумать синтаксис, присваивающий выведенному типу имя, не должно быть проблемой.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Class1
{
    public class Data F1()
    {
        return new { A = 10, B = 20 };
    }

    public void F2(Data data)
    {
        var a = data.A;
        var b = data.B;
    }
}
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420745
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
И как ты подставишь анонимный класс в параметры метода, не потеряв типизацию? Просто логически подумай. Тут дело не в том, что они не хотят сделать такую возможность. Эта задача не решаема.
С помощью небольшой хитрости.
Код: c#
1.
2.
3.
4.
5.
public static void M1<T>(Func<T> f, Action<T> a)
        {
            var x = f();
            a(x);
        }


Использование
Код: c#
1.
M1(() => new { a = 1, b = "qwe" }, v => Console.WriteLine(v));


Алексей КВ TypeScript эта задача решена. Было бы желание.
Как? Просвяти?
Алексей К или добавили бы синтаксический сахар для описания таких конструкций:
Код: c#
1.
static readonly Expression<Func<MyClass, int>> MyExpression = o => o.Value;


Было бы не плохо считать например так
let MyExpression = o => o.Value; это Expression<Func<MyClass, int>> MyExpression = o => o.Value;
var MyExpression = o => o.Value; это Func<MyClass, int> MyExpression = o => o.Value;
В F# это разрешено, но там лучше вывод типов и генерики двух типов....
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420754
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВывести тип, возвращаемый методом, можно, в TypeScript это реализовано. Придумать синтаксис, присваивающий выведенному типу имя, не должно быть проблемой.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Class1
{
    public class Data F1()
    {
        return new { A = 10, B = 20 };
    }

    public void F2(Data data)
    {
        var a = data.A;
        var b = data.B;
    }
}


Таки в 7.0
Код: c#
1.
2.
3.
4.
 static (int Number, string Name) Get()
        {
            return (2, "asd");
        }



Вызывай хоть откуда, intellisense тебе подскажет, что это
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420760
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВТаки в 7.0Ну покажи как это можно срастить с EntityFramework. В одном методе запрос, в другом методе обработка результата запроса, без описания класса для возвращаемых запросом записей.
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420780
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ААААААААААААААААААААААААААААААААААА!!!!!!!!!!!!!!!!!!!
ValueTuple нельзя использовать в сопоставлении с образом
АААААААААААААААААААААААААААААААААААААААААА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420781
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВАлексей К или добавили бы синтаксический сахар для описания таких конструкций:
Код: c#
1.
static readonly Expression<Func<MyClass, int>> MyExpression = o => o.Value;


Было бы не плохо считать например так
let MyExpression = o => o.Value; это Expression<Func<MyClass, int>> MyExpression = o => o.Value;
var MyExpression = o => o.Value; это Func<MyClass, int> MyExpression = o => o.Value;
В F# это разрешено, но там лучше вывод типов и генерики двух типов....Я бы сделал так, для приведённого мной выше примера:
Код: c#
1.
2.
3.
4.
expression int MyExpression(MyClass o)
{
    return o.Value;
}
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420787
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЕвгенийВТаки в 7.0Ну покажи как это можно срастить с EntityFramework. В одном методе запрос, в другом методе обработка результата запроса, без описания класса для возвращаемых запросом записей.
Пиши вместо new{.....} - () и используй.
Код: c#
1.
2.
3.
4.
5.
   static IEnumerable<(int Number, string Name, decimal Price)>M2()
        {
            var data = Enumerable.Range(1, 10).Select(i => (i, "Name" + i, Convert.ToDecimal(i) * 100));
            return data;
        }


Код: c#
1.
2.
3.
4.
 foreach(var d in M2())
            {
                Console.WriteLine(d);
            }
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420791
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВААААААААААААААААААААААААААААААААААА!!!!!!!!!!!!!!!!!!!
ValueTuple нельзя использовать в сопоставлении с образом
АААААААААААААААААААААААААААААААААААААААААА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Нет подстановочных символов и вообще в
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    public string sql_ru((int a, int b, int c) arg)
        {
          switch(arg)
            {
                case (4, 5, 6):
                    break;
            }
            return null;
        }



(4, 5, 6) - не является постоянным значением!
ААААААААААААААААААА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420872
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВывести тип, возвращаемый методом, можно, в TypeScript это реализовано. Придумать синтаксис, присваивающий выведенному типу имя, не должно быть проблемой.

Эмм..

Расскажи нам, как ты определишь анонимный тип в интерфейсе. Предложи просто синтаксический способ, забьём пока на возможность реализации.
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420878
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу покажи как это можно срастить с EntityFramework. В одном методе запрос, в другом методе обработка результата запроса, без описания класса для возвращаемых запросом записей.

Хоспади, если тебе нужны динамические наборы, тебе не EF нужен, а DataTable, который уже наверное сединой покрылся от старости. Также чем не устраивает возвращаеть анонимы через dynamic? Т.е. конечно это всё полная лажа, ведь хочется типизации. Но как насчёт интерфейса. Покажи метод интерфейса, возвращающий анонимный тип, со статической типизацией. Вот просто, как бы это могло быть. И как интерфейс выведет тип из реализации. В общем, ппц проблему нашёл
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420899
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

object подвластно всё :)
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420909
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
is - остался не перегружаемым оператором
...
Рейтинг: 0 / 0
Запуск Visual Studio 2017
    #39420993
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВis - остался не перегружаемым оператором

Зачем это тебе?
...
Рейтинг: 0 / 0
25 сообщений из 82, страница 3 из 4
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запуск Visual Studio 2017
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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