Скажем, у меня есть универсальный метод в C #, который принимает два значения типа T:
public void M<T>(T a, T b)
{
...
}
Внутри тела M () Я хочу сравнить оба входных значения на равенство. Поскольку я ничего не знаю об их типах времени выполнения, за исключением того, что они одного типа, я мог бы сделать это с помощью статического метода object.Equals () и позволить ему выбрать лучший способ:
public void M<T>(T a, T b)
{
if (object.Equals(a, b))
{
...
}
else
{
...
}
}
Проблема, которую я вижу здесь, заключается в ненужной упаковке двух значений, когда T не является ссылочным типом. Я хотел бы избежать этого штрафа, потому что M () вызывается очень часто.
Мой вопрос: есть ли лучший способ сделать это? Я, очевидно, заинтересован в решении, которое не включало бы слишком много анализа Т-фронта, которое компенсировало бы выгоды от уклонения от бокса.
ТИА.