Есть ли в Python 3 дополнительные для дженериков в C #? - PullRequest
0 голосов
/ 29 июня 2019

Я хочу иметь список типа Regex. Но в списке может быть None (или null).

Так что я бы хотел синтаксис List<Regex|Null> или что-то подобное

  • Здесь есть запись в блоге здесь , которая имеет ту же концепцию.

Но я надеюсь, что в C # может быть что-то запеченное. Я пропускаю.

  • Python 3 имеет Необязательно . Есть ли в C # что-нибудь подобное?

  • Я видел кое-что об использовании знака вопроса здесь . Но это не давало мне того примера.


new T?(x)

Я видел:

  • пост, озаглавленный «Дискриминационные союзы» здесь , который как бы достигает цели того, что я преследую.
  • Также это называется «Несколько универсальных типов в одном списке» one .

Я также думаю, что для подобных вещей часто бывают уроки Union, видя похожие ТАК сообщения


Каким будет самый простой код C # для определения такого Типизированного универсального списка и добавления к нему null или Regex?

1 Ответ

0 голосов
/ 29 июня 2019

На самом деле вам не нужно ничего делать, чтобы получить нулевые значения в таком списке:

var list = new List<Regex>();
list.Add(null);

Это потому, что Regex - это класс, и именно так он работает.

var regex = CreateMyRegex();
list.Add(regex);

Независимо от того, что возвращает метод CreateMyRegex, ноль или экземпляр, он будет добавлен в список.

На самом деле в настоящее время вы не можете сделать это наоборот - запретите пустые значения в таком списке. Есть вероятность, что это будет возможно в C # 8.

Если вы хотите сделать это со структурами, вы можете сделать это также:

var list = new List<int?>();
list.Add(null);

Синтаксис вопросительного знака не ограничен обобщениями в c #, вы можете создавать пустые структуры как любой другой тип переменной:

int? number = null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...