У меня проблема с передачей определения структуры функции. Не экземпляр структуры, а определение.
Мы открыты для альтернативных методов делать то, что мы хотим, но сейчас мы пытаемся это сделать -
Мы пишем пользовательский элемент управления. Этот элемент управления предназначен для отображения данных в виде списка с заголовками, но какой «список» может потребоваться отобразить, неизвестно во время разработки. Прямо сейчас мы придерживаемся подхода, который заключается в том, что для упрощения работы мы передадим функции Constructor и / или GetHeaders определение Struct. Заголовки будут извлечены из имен полей, найденных в переданном определении структуры, с последующим поступлением данных как в отдельные объекты, так и в списки объектов этого типа структуры.
Пример. На стороне управления:
private void GetHeaders( dynamic _strc )
{
//Type _str_type = ((ObjectHandle) _str).Unwrap().GetType();
FieldInfo[] fi = _strc.GetFields( BindingFlags.Public | BindingFlags.Instance );
int _i = 0;
foreach (FieldInfo _f in fi)
{
textBox1.Lines[_i] = _f.Name;
}
textBox1.Refresh();
}
-Пожалуйста, обратите внимание, я просто пытаюсь убедиться, что могу разобрать структуру. Мы не знаем, сработает ли это на самом деле, поскольку мы не можем получить тест для компиляции из-за того, что ниже.
У пользователя будет собственное определение структуры, к которому у Control не будет прямого доступа.
public struct MineStruct
{
String ID; // So we know who they are
String Name; // What we call them to their face
String Nickname;// What we call them behind their back
String Address; // We know where they live
int Mileage; // How far they've gone
int Millage; // How much they'll pay. Oh, they'll pay...
}
Он будет передаваться во время выполнения, как мы надеялись, во что-то вроде этого:
private void button1_Click(object sender, EventArgs e)
{
GetHeaders( MineStruct ); //<-Error messaage here
}
Сообщение об ошибке, которое мы получаем: «Form1.MineStruct» - это тип. Который недопустим в данном контексте »
Я пытался изменить функцию GetHeaders, чтобы она взяла «Type», но ничего не помогает.
Итак, мои вопросы по порядку ...
1) Это хороший способ подойти к проблеме? Мы полностью открыты для другого пути, даже для прохождения целого класса, но мы хотели бы сохранить его легким, что мы считаем, что это будет.
2) Это вообще возможно?
3) Легко ли это?
4) Если так, как мы передаем определение структуры функции в C #?