Nullable <T> для общего метода в С#?

Как написать общий метод, который может использовать объект Nullable для использования в качестве метода расширения. Я хочу добавить XElement в родительский элемент, но только если значение, которое будет использоваться, не является нулевым.

например.

public static XElement AddOptionalElement<T>(this XElement parentElement, string childname, T childValue){
...
code to check if value is null
add element to parent here if not null
...
}

Если я сделаю это AddOptionalElement<T?>(...), тогда я получу ошибки компилятора. Если я сделаю это AddOptionalElement<Nullable<T>>(...), тогда я получу ошибки компилятора.

Есть ли способ, которым я могу это понять?

Я знаю, что могу позвонить своему методу:

parent.AddOptionalElement<MyType?>(...)

но это единственный способ?

Ответ 1

public static XElement AddOptionalElement<T>(
    this XElement parentElement, string childname, T? childValue)
    where T : struct
{
    // ...
}

Ответ 2

Вам нужно ограничить T как struct, иначе он не может быть нулевым.

public static XElement AddOptionalElement<T>(this XElement parentElement, 
                                             string childname, 
                                             T? childValue) where T: struct { ... }

Ответ 3

попробовать
 AddOptionalElement<T>(T? param) where T: struct { ... }

Ответ 4

Тип Nullable имеет ограничение where T : struct, new(), поэтому ваш метод obviuosly должен содержать ограничение struct, чтобы сделать Nullable<T> работоспособным. Полученный метод должен выглядеть так:

public static XElement AddOptionalElement<T>(this XElement parentElement, string childname, T? childValue) where T : struct
    {
      // TODO: your implementation here
    }