Я хочу создать простой метод, который принимает значения типа значения и ссылочного типа, т.е. int является значением, а строка является ссылкой.
Итак, я начинаю с:
public bool areBothNotNull<T>(T? p1, T? p2)
{
return (p1.HasValue && p2.HasValue);
}
Итак, я хочу иметь возможность использовать его вот так:
var r1 = areBothNotNull<int>(3, 4); // will be true
var r2 = areBothNotNull<int>(3, null); // will be false
var r3 = areBothNotNull<string>("three", "four"); // will be true
var r4 = areBothNotNull<string>(null, "four"); // will be false
Но первая проблема, с которой я сталкиваюсь, -
Тип "T" должен быть невообразимым типом значения, чтобы использовать его как параметр "T" в родовом типе или методе "System.Nullable",
Чтобы продолжить, добавьте ограничение struct к моему методу
public bool areBothNotNull<T>(T? p1, T? p2) where T : struct
Но теперь метод не будет принимать строковые вызовы и даст мне эту ошибку:
Тип "string" должен быть невообразимым типом значения, чтобы использовать его как параметр "T" в родовом типе или методе.
Возможно ли это? Или почему мы не можем этого сделать?