Это мои 2 цента на основе ответа Grax , но с двумя параметрами, необходимыми для общего метода.
Предположим, что ваш метод определяется следующим образом в классе Helpers:
public class Helpers
{
public static U ConvertCsvDataToCollection(string csvData)
where U : ObservableCollection
{
//transform code here
}
}
В моем случае тип U всегда является наблюдаемым объектом хранения коллекции типа T.
Поскольку у меня есть предопределенные типы, я сначала создаю «фиктивные» объекты, которые представляют наблюдаемый набор (U) и объект, хранящийся в нем (T), и который будет использоваться ниже, чтобы получить их тип при вызове Make
object myCollection = Activator.CreateInstance(collectionType);
object myoObject = Activator.CreateInstance(objectType);
Затем вызовите GetMethod, чтобы найти вашу общую функцию:
MethodInfo method = typeof(Helpers).
GetMethod("ConvertCsvDataToCollection");
До сих пор вышеупомянутый вызов в значительной степени идентичен тому, что было объяснено выше, но с небольшой разницей, когда вам нужно передать ему несколько параметров.
Вам нужно передать массив Type [] в функцию MakeGenericMethod, которая содержит типы «фиктивных» объектов, которые были созданы выше:
MethodInfo generic = method.MakeGenericMethod(
new Type[] {
myCollection.GetType(),
myObject.GetType()
});
Как только это будет сделано, вам нужно вызвать метод Invoke, как указано выше.
generic.Invoke(null, new object[] { csvData });
И все готово.
UPDATE:
Поскольку @Bevan выделен, мне не нужно создавать массив при вызове функции MakeGenericMethod, поскольку он принимает параметры, и мне не нужно создавать объект, чтобы получить типы, поскольку я могу просто передать типы непосредственно этой функции. В моем случае, поскольку у меня есть типы, предопределенные в другом классе, я просто изменил свой код на:
object myCollection = null;
MethodInfo method = typeof(Helpers).
GetMethod("ConvertCsvDataToCollection");
MethodInfo generic = method.MakeGenericMethod(
myClassInfo.CollectionType,
myClassInfo.ObjectType
);
myCollection = generic.Invoke(null, new object[] { csvData });
myClassInfo содержит 2 свойства типа Type
, которые я установил во время выполнения на основе перечисления значение передается конструктору и предоставит мне соответствующие типы, которые затем я использую в MakeGenericMethod.
Еще раз спасибо за выделение этого @Bevan.
Проверьте этот список бесплатных программ для создания файлов справки , обязанный быть чем-то полезным там.
Просто помнивший: в зависимости от того, что Вы хотите сделать, можно использовать doxygen (www.doxygen.org) или свободный инструмент справки от http://www.vizacc.com/ .
Вы пытаетесь сделать просто CHM или другие выходные форматы также?
Смотрят на DocBook. Можно сделать (из одного исходного файла) PDF, HTML и председателя - и некоторые другие, также. Я использовал его в прошлом, но это не очень легко или удобно использовать. Если Вы только хотите произвести председателя (и должен использовать бесплатное решение), посмотрите, можно ли сойти с рук использование htmlhelp семинара ( http://www.microsoft.com/downloads/details.aspx?familyid=00535334-c8a6-452f-9aa0-d597d16580cc&displaylang=en ).
При попытке создать .chm базирующаяся справка, попробуйте сборка председателя
Мне нравится Сфинкс .
Вы пишете документацию, используя формат простой текстовой разметки, reStructuredText.
Sphinx может создавать HTML, Windows HTML help и PDF (с помощью Latex).
Я создал документацию для конечных пользователей для двух проектов, использующих Sphinx, а также использовал ее для документирования пары пакетов Python (Sphinx имеет много возможностей по извлечению документации из модулей Python, он был изначально создан для написания документации на Python).
Начало работы очень простое, и вы получаете документацию профессионального вида с минимальными усилиями.
Если вы привыкли к WYSIWYG редактированию текста, то использование простого текстового формата разметки может потребовать некоторого привыкания. Но я думаю, что это того стоит.
У меня также есть некоторый опыт работы с DocBook (одним из упомянутых проектов документации для конечных пользователей была миграция с DocBook на Sphinx). Я предпочитаю Sphinx, а не Docbook: С обычным текстом работать приятнее, чем с XML, у Sphinx более простая инструментальная цепочка.
Смотрите также: