У меня есть устаревший код с методом foo , который имеет более 700 перегрузок:
[DllImport("3rdparty.dll")]
protected static extern void foo(int len, ref structA obj);
[DllImport("3rdparty.dll")]
protected static extern void foo(int len, ref structB obj);
[DllImport("3rdparty.dll")]
protected static extern void foo(int len, ref structC obj);
//and 700 similar overloads for foo...
Я бы хотел показать эти перегруженные методы с помощью одного метода с использованием универсальных шаблонов:
public void callFoo<T>(int len)
where T : new() //ensure an empty constructor so it can be activated
{
T obj = Activator.CreateInstance<T>(); //foo expects obj to be empty, and fills it with data
foo(len, ref obj);
//...do stuff with obj...
}
К сожалению, это возвращает ошибки: « Лучшее совпадение перегруженного метода для 'foo (int, ref StructA)' имеет некоторые недопустимые аргументы » и « не может преобразовать из 'ref T' в 'ref StructA' ".
Есть ли элегантный способ добиться этого?