У меня есть код устаревшего кода с методом 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 ".
Есть ли элегантный способ достичь этого?