Ограничение notnull
Запись where T : notnull означает, что
значение типа T не должно быть null
в смысле системы типов: подходят int,
string и другие non-nullable типы.
int?
и nullable reference types с ? для
параметра не подходят. Ограничение помогает
хранить аргумент без лишних проверок на null.
Синтаксис
class Cell<T> where T : notnull
{
public T Value { get; }
public Cell(T value) => Value = value;
}
Пример
Давайте обернём число в ячейку с notnull:
using System;
class Cell<T> where T : notnull
{
public T Value { get; }
public Cell(T value)
{
Value = value;
}
}
class Program
{
static void Main()
{
var cell = new Cell<int>(5);
Console.WriteLine(cell.Value);
}
}
Результат выполнения кода:
5
Пример
Давайте сохраним строку - она тоже подходит
под notnull:
using System;
class Holder<T> where T : notnull
{
public T Item { get; }
public Holder(T item)
{
Item = item;
}
}
class Program
{
static void Main()
{
var holder = new Holder<string>("abcde");
Console.WriteLine(holder.Item);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте вернём сохранённое значение из обобщённого метода:
using System;
class Pass<T> where T : notnull
{
public static T Echo(T value)
{
return value;
}
}
class Program
{
static void Main()
{
string res = Pass<string>.Echo("12345");
Console.WriteLine(res);
}
}
Результат выполнения кода:
"12345"
Смотрите также
-
ограничение class,
которое задаёт ссылочный тип отдельно отnotnull -
ограничение struct,
которое отсекает nullable value types -
nullable,
который задаёт типы вродеint? -
тип
string,
который можно передать вTсnotnull