Итак, в какой-то момент у меня что-то работало, но весь мой старый тестовый код был случайно удален, и я не могу снова заставить его работать... Помогите!
У меня есть функция в библиотеке:
public int SetData( dynamic[] p_a )
{
int successful_count = 0;
int _save_selected_row;
//It goes on...
}
Пользователи будут вызывать эту функцию, и мне показалось, что я помню, как она вызывалась так:
struct MyStruct
{
public String Name;
public String Home_Address;
}
MyStruct[] UseArray = new MyStruct[2];
private void button1_Click(object sender, EventArgs e)
{
UseArray[0].Name = "Override name 1";
UseArray[0].Home_Address = "Override address 1";
UseArray[1].Name = "Override name 2";
UseArray[1].Home_Address = "Override address 2";
ncflsDisplay1.SetData( UseArray );
}
Но я получаю сообщение об ошибке «Не удается преобразовать MyStruct[] в dynamic[]».
Та же ошибка для
ncflsDisplay1.SetData( (dynamic[]) UseArray );
Я знаю, что месяц назад у меня работало что-то подобное, но при очистке кода мои тестовые программы были удалены.
Любая идея, что вызов, который должен будет сделать пользователь, должен выглядеть как вызов «SetData» с массивом любого типа, который у них есть?
Обновление: у меня получилось с этим чудовищем, но я знаю, что мне не нужно было делать это раньше...
UseArray.Cast<dynamic>().ToArray()
В какой-то момент код был намного чище — например, простой вызов с использованием UseArray, но сейчас он не работает.
Помечен как дубликат, потому что тот, кто отметил это, говорит, что мы должны использовать классы вместо структур, а использование классов для передачи объектов подклассов хорошо задокументировано. Хотя это предложение сделано из лучших побуждений, здесь оно неприменимо.
События настигли первое решение. У нас есть новое решение!
Изменены параметры функции отображения на
public int SetData<T>( T[] p_a )
который позволяет звонить пользователю
ncflsDisplay1.SetData( UseArray );