Метод расширения по типу и nullable <type>
Для простоты предположим, что я хочу написать метод расширения для типа int? и int:
public static class IntExtentions
{
public static int AddOne(this int? number)
{
var dummy = 0;
if (number != null)
dummy = (int)number;
return dummy.AddOne();
}
public static int AddOne(this int number)
{
return number + 1;
}
}
Можно ли это сделать, используя только один метод?
Ответы
Ответ 1
К сожалению, нет. Вы можете сделать int? (или какой тип с нулевым типом вы используете) метод вызывает метод без значения NULL очень легко, так что вам не нужно дублировать любую логику с помощью двух методов - например,
public static class IntExtensions
{
public static int AddOne(this int? number)
{
return (number ?? 0).AddOne();
}
public static int AddOne(this int number)
{
return number + 1;
}
}
Ответ 2
Нет, вы не можете. Это можно проверить экспериментально, скомпилировав следующий код
public static class Example {
public static int Test(this int? source) {
return 42;
}
public void Main() {
int v1 = 42;
v1.Test(); // Does not compile
}
}
Вам нужно будет написать метод расширения для каждого типа (с возможностью NULL, а не с возможностью NULL), если вы хотите, чтобы он использовался для обоих типов.