Возможно ли создание универсального метода C #, который принимает (обнуляемый) тип значения и ссылочный тип?

Я хочу создать простой метод, который принимает кактип ценности а такжетип ссылки параметры, то есть 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'.

Чтобы продолжить, я добавляю ограничение структуры к своему методу

public bool areBothNotNull<T>(T? p1, T? p2) where T : struct

Но теперь метод не принимает строковые вызовы и выдает мне эту ошибку:

Тип 'string' должен быть типом значения, не допускающим значения NULL, чтобы использовать его в качестве параметра 'T' в универсальном типе или методе.

Это возможно? Или почему нам мешают это сделать?

Ответы на вопрос(1)

Ваш ответ на вопрос