Вопрос по Generic-методу и ограничению типов в C#

Хочу сделать примерно такой Generic-метод:

private static TOut? ConvertWithNullCheck<TOut>(string field, Func<string, TOut> convertMethod) where TOut : struct
{
    return field == null ? null : (TOut?)convertMethod(field);
}

Идея метода такова, что перед вызовом конвертера входное значение string field проверяется на null. И если оно равно null, то метод должен вернуть null.

Сейчас он работает только для значимых типов. Однако я хочу, чтобы он также работал и для ссылочных типов. Например, так работает:

public static int? ConvertModelId(string modelId)
{
    var result = ConvertWithNullCheck(modelId, ConvertModelIdCore);
    return result;
}

private static int ConvertModelIdCore(string modelIdField)
{
    //..
}

А так не работает (и это логично, потому что string - ссылочный тип):

public static string ConvertCellId(string cellId)
{
    var result = ConvertWithNullCheck(cellId, ConvertCellId);
    return result;
}

private static string ConvertCellIdCore(string cellIdField)
{
    //...
}

Есть ли какой-то способ сделать правильное ограничение для этого generic-метода? Можно использовать версии языка C# 6.0+


Ответы (0 шт):