Вопрос по 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+