Буду очень благодарен за любую помощь. У меня есть строка в качестве ввода. Назовем его «table_name». Я хочу создать коллекцию table_names (где table_name является фактическим объектом в проекте, на который ссылается). Я сделал следующее:C# Получить членов общего объекта
Object obj = Activator.CreateInstance("ClassLibrary", "ClassLibrary." + table_name);
Type CollectionType = typeof(Collection<>).MakeGenericType(new[] { obj.GetType() });
ICollection c = (ICollection)Activator.CreateInstance(CollectionType);
Тогда я назвал метод (который находится в другом проекте, и который возвращает коллекцию объектов), чтобы заполнить свой объект ICollection (в данном случае, с):
object[] parameters = new object[] { x_coord, y_coord, buffer_dist};
c = (ICollection)sde_db.GetType().GetMethod("Method" + table_name).Invoke(sde_db, parameters);
Пока все работает нормально. Я вижу количество элементов в коллекции. Но проблема в том, что когда я пытаюсь выполнить итерацию по коллекции, она не отображает ее элементы. Я вижу их только во время работы. Есть ли способ получить членов коллекции во время компиляции? Я хочу что-то вроде:
for(int i = 0; i < c.Count; i++){
label.Text = c[i].Details;
}
Спасибо!
Есть ли причина, по которой вы не можете просто объявить коллекцию в обычном режиме? Это похоже на невероятно крутой способ сделать это. – Magus
Компилятор не знает, что они печатают во время компиляции, это определяет время выполнения. Если вы знаете во время компиляции, вам не нужно будет делать эти размышления. –
Какую версию C# вы настраиваете? C# 4.0 и 5.0 имеют динамические объекты. – diegog