C # не может вызвать перегруженный неуниверсальный метод из универсального метода

У меня есть устаревший код с методом 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' ".

Есть ли элегантный способ добиться этого?

16
задан Iain Sproat 11 October 2010 в 14:45
поделиться