C# какая альтернатива return null?
От: Разраб  
Дата: 11.08.23 08:17
Оценка:
Подчеркивания раздражают. Юнион типы завезли уже?
Флажки не канают.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: C# какая альтернатива return null?
От: kov_serg Россия  
Дата: 11.08.23 08:21
Оценка: :))
Здравствуйте, Разраб, Вы писали:

throw null;
Re: C# какая альтернатива return null?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 11.08.23 08:32
Оценка:
Здравствуйте, Разраб, Вы писали:

Р>Подчеркивания раздражают. Юнион типы завезли уже?

Р>Флажки не канают.

Есть кортежи https://metanit.com/sharp/tutorial/2.19.php
и солнце б утром не вставало, когда бы не было меня
Re: C# какая альтернатива return null?
От: vmpire Россия  
Дата: 11.08.23 08:37
Оценка: +1
Здравствуйте, Разраб, Вы писали:

Р>Подчеркивания раздражают.

А что за подчёркивания? У меня не подчёркивает
Re[2]: C# какая альтернатива return null?
От: Разраб  
Дата: 11.08.23 09:22
Оценка:
Здравствуйте, vmpire, Вы писали:

V>Здравствуйте, Разраб, Вы писали:


Р>>Подчеркивания раздражают.

V>А что за подчёркивания? У меня не подчёркивает
public User Get(int id) 
{
 if(id<1) return null;
....
}
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: C# какая альтернатива return null?
От: vmpire Россия  
Дата: 11.08.23 09:27
Оценка: +2
Здравствуйте, Разраб, Вы писали:

Р>Здравствуйте, vmpire, Вы писали:


V>>Здравствуйте, Разраб, Вы писали:


Р>>>Подчеркивания раздражают.

V>>А что за подчёркивания? У меня не подчёркивает
Р>
Р>public User Get(int id) 
Р>{
Р> if(id<1) return null;
Р>....
Р>}
Р>

Так может быть это предупреждения от Nullable reference types?
Если не хотите ими пользоваться — отключите для всего проекта.
Если будете пользоваться — замените "User" на "User?" в возвращаемом типе.
Re[3]: C# какая альтернатива return null?
От: kov_serg Россия  
Дата: 11.08.23 09:33
Оценка: +2
Здравствуйте, Разраб, Вы писали:

Р>>>Подчеркивания раздражают.

V>>А что за подчёркивания? У меня не подчёркивает
Р>public User Get(int id) 
Р>{
Р> if(id<1) return null;
Р>....
Р>}

public User Get(int id) {
  if(!IsValidUserID(id)) return InvalidUser();
  ....
}
Re[4]: C# какая альтернатива return null?
От: Разраб  
Дата: 11.08.23 12:47
Оценка:
Здравствуйте, vmpire, Вы писали:

V>Здравствуйте, Разраб, Вы писали:


Р>>Здравствуйте, vmpire, Вы писали:


V>>>Здравствуйте, Разраб, Вы писали:


Р>>>>Подчеркивания раздражают.

V>>>А что за подчёркивания? У меня не подчёркивает
Р>>
Р>>public User Get(int id) 
Р>>{
Р>> if(id<1) return null;
Р>>....
Р>>}
Р>>

V>Так может быть это предупреждения от Nullable reference types?
V>Если не хотите ими пользоваться — отключите для всего проекта.
V>Если будете пользоваться — замените "User" на "User?" в возвращаемом типе.
Это понятно, но зачем ругаться? User ссылочный тип следовательно null допустимое значение для множества юзеров.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[5]: C# какая альтернатива return null?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.08.23 13:07
Оценка: +3
Здравствуйте, Разраб, Вы писали:

V>>Так может быть это предупреждения от Nullable reference types?

V>>Если не хотите ими пользоваться — отключите для всего проекта.
V>>Если будете пользоваться — замените "User" на "User?" в возвращаемом типе.
Р>Это понятно, но зачем ругаться? User ссылочный тип следовательно null допустимое значение для множества юзеров.

В том то и дело, что при включении NRT значение null становится недопустимым для типа User (который reference type), оно допустимо только для User?
Re[6]: C# какая альтернатива return null?
От: Разраб  
Дата: 11.08.23 13:13
Оценка: -3
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, Разраб, Вы писали:


V>>>Так может быть это предупреждения от Nullable reference types?

V>>>Если не хотите ими пользоваться — отключите для всего проекта.
V>>>Если будете пользоваться — замените "User" на "User?" в возвращаемом типе.
Р>>Это понятно, но зачем ругаться? User ссылочный тип следовательно null допустимое значение для множества юзеров.

G>В том то и дело, что при включении NRT значение null становится недопустимым для типа User (который reference type), оно допустимо только для User?

Я знаю про nullable только вот он как раз и не может быть null, а обычного class null валидное значение.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[7]: C# какая альтернатива return null?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.08.23 13:19
Оценка:
Здравствуйте, Разраб, Вы писали:

Р>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, Разраб, Вы писали:


V>>>>Так может быть это предупреждения от Nullable reference types?

V>>>>Если не хотите ими пользоваться — отключите для всего проекта.
V>>>>Если будете пользоваться — замените "User" на "User?" в возвращаемом типе.
Р>>>Это понятно, но зачем ругаться? User ссылочный тип следовательно null допустимое значение для множества юзеров.

G>>В том то и дело, что при включении NRT значение null становится недопустимым для типа User (который reference type), оно допустимо только для User?

Р>Я знаю про nullable только вот он как раз и не может быть null, а обычного class null валидное значение.
Прочитайте внимательно по ссылке выше.
Re[5]: C# какая альтернатива return null?
От: vmpire Россия  
Дата: 11.08.23 13:35
Оценка: +3
Здравствуйте, Разраб, Вы писали:

Р>>>>>Подчеркивания раздражают.

V>>>>А что за подчёркивания? У меня не подчёркивает
Р>>>
Р>>>public User Get(int id) 
Р>>>{
Р>>> if(id<1) return null;
Р>>>....
Р>>>}
Р>>>

V>>Так может быть это предупреждения от Nullable reference types?
V>>Если не хотите ими пользоваться — отключите для всего проекта.
V>>Если будете пользоваться — замените "User" на "User?" в возвращаемом типе.
Р>Это понятно, но зачем ругаться? User ссылочный тип следовательно null допустимое значение для множества юзеров.
Прочитайте обоснование введение Nullable reference types и просто погуглите по этим словам. На эту тему было довольно много споров, не вижу смысла их тут дублироватаь.
Кратко — это опциональная дополнительная статическая проверка на допустимость null в конкретном контексте. То, что явно не помечено, как "допустимо null" по умолчанию выдаёт предупреждение.
У вас явно не помечено, потому и ругается.
Считаете эту проверку бессмысленной — отключите (свойства проекта, раздел build) и не парьтесь.
Re[3]: C# какая альтернатива return null?
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.08.23 17:19
Оценка: +2
Здравствуйте, Разраб, Вы писали:
Р>>>Подчеркивания раздражают.
public User? Get(int id) 
{
  if(id<1) return null;
  ...
}
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: C# какая альтернатива return null?
От: Aquilaware  
Дата: 12.08.23 12:04
Оценка:
Здравствуйте, Разраб, Вы писали:

Р>Подчеркивания раздражают. Юнион типы завезли уже?

Р>Флажки не канают.

Есть два распространенных способа решения этой задачи.

Способ №1:

public User? TryGetUser(int id) 
{
    if (id < 1)
        return null;
    ...
}


Способ №2:

public bool TryGetUser(int id, [MaybeNullWhen(false)] out User user) 
{
    if (id < 1)
    {
        user = null;
        return false;
    }
    ...
}


Есть и третий способ, это использование Optional<T>. Эту конструкцию предоставляют некоторые библиотеки-фреймворки для .NET:

public Optional<User> TryGetUser(int id) 
{
    if (id < 1)
        return Optional.None<User>();
    ...
    return Optional.Some(user);
}

// и пример использования

var user = TryGetUser(1);
if (user.HasValue)
    AddPermissionFor(user.Value);


Это пожалуй и всё. Мой самый предпочитамый способ — это способ №1, но и другие тоже приходится иногда использовать.
Re[2]: C# какая альтернатива return null?
От: Разраб  
Дата: 13.08.23 03:31
Оценка: +1 :)
A>Это пожалуй и всё. Мой самый предпочитамый способ — это способ №1, но и другие тоже приходится иногда использовать.

Второй с тасками не работает. так что мимо.
Первый да, но ведь оно и до ? работало.
Усложняют шарп до крестов. Потом каятся будут.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: C# какая альтернатива return null?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 13.08.23 11:21
Оценка: 6 (1)
Здравствуйте, Разраб, Вы писали:

A>>Это пожалуй и всё. Мой самый предпочитамый способ — это способ №1, но и другие тоже приходится иногда использовать.


Р>Второй с тасками не работает. так что мимо.

Р>Первый да, но ведь оно и до ? работало.
Р>Усложняют шарп до крестов. Потом каятся будут.

Кстати https://stackoverflow.com/questions/58681729/net-non-nullable-reference-type-and-out-parameters

https://learn.microsoft.com/ru-ru/dotnet/csharp/language-reference/attributes/nullable-analysis

[return: MaybeNull]
static string Find(string key)
{
    return key == "" ? null : key;
}

string value1 = Find("key"); // Warning CS8600 Converting null literal or possible null value to non-nullable type.
string? value2 = Find("key"); // No warning
var value3 = Find("key"); // The inferred type is 'string?'


А насчет кортежей так по мне как раз и удобно использовать их вместо TryGetValue или Optional
Для кортежей можно попробовать NotNullIfNotNull
https://devblogs.microsoft.com/dotnet/try-out-nullable-reference-types/
и солнце б утром не вставало, когда бы не было меня
Отредактировано 13.08.2023 19:15 Serginio1 . Предыдущая версия . Еще …
Отредактировано 13.08.2023 11:36 Serginio1 . Предыдущая версия .
Re[2]: C# какая альтернатива return null?
От: vdimas Россия  
Дата: 13.08.23 17:30
Оценка:
Здравствуйте, Aquilaware, Вы писали:

A>Это пожалуй и всё.


Еще https://en.wikipedia.org/wiki/Null_object_pattern
Re: C# какая альтернатива return null?
От: IT Россия linq2db.com
Дата: 16.08.23 05:32
Оценка: 18 (1)
Здравствуйте, Разраб, Вы писали:

Р>Подчеркивания раздражают. Юнион типы завезли уже?


return null ! ;
Если нам не помогут, то мы тоже никого не пощадим.
Re: C# какая альтернатива return null?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 27.08.23 13:19
Оценка: 102 (3)
Здравствуйте, Разраб, Вы писали:

Р>Подчеркивания раздражают. Юнион типы завезли уже?

https://code-maze.com/csharp-discriminated-unions-with-oneof/
https://github.com/dotnet/csharplang/blob/main/proposals/discriminated-unions.md
https://github.com/mcintyre321/OneOf/blob/master/OneOf/OneOfT3.generated.cs
и солнце б утром не вставало, когда бы не было меня
Отредактировано 27.08.2023 15:39 Serginio1 . Предыдущая версия . Еще …
Отредактировано 27.08.2023 13:20 Serginio1 . Предыдущая версия .
Re[2]: C# какая альтернатива return null?
От: IT Россия linq2db.com
Дата: 26.09.23 15:38
Оценка: 11 (1)
Здравствуйте, Serginio1, Вы писали:

Р>>Подчеркивания раздражают. Юнион типы завезли уже?

S>https://code-maze.com/csharp-discriminated-unions-with-oneof/
S>https://github.com/dotnet/csharplang/blob/main/proposals/discriminated-unions.md
S>https://github.com/mcintyre321/OneOf/blob/master/OneOf/OneOfT3.generated.cs

Практический смысл вот этого всего в комфортной работе совместно с патерн мачингом. В C# уже достаточно для этого средств даже для существующих типов. Здесь.

Хотя специализированный тип не помешал бы. Но боюсь, в MS опять как всегда накосячат.
Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.