Nullable <T>для универсального метода в c #? - PullRequest
10 голосов
/ 20 декабря 2010

Как я могу написать универсальный метод, который может принимать объект 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?>(...)

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

Ответы [ 4 ]

12 голосов
/ 20 декабря 2010
public static XElement AddOptionalElement<T>(
    this XElement parentElement, string childname, T? childValue)
    where T : struct
{
    // ...
}
4 голосов
/ 20 декабря 2010

Вы должны ограничить T, чтобы быть struct - иначе это не может быть обнуляемо.

public static XElement AddOptionalElement<T>(this XElement parentElement, 
                                             string childname, 
                                             T? childValue) where T: struct { ... }
1 голос
/ 20 декабря 2010

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

0 голосов
/ 20 декабря 2010

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

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