что-то вроде этого возможно - и если да, то как?Parameter.GetType() - Должен ли быть известен тип во время компиляции?
Я хочу создать класс, способный десериализовать данный XML-файл. XML-файл содержит сериализованные значения пользовательского типа, который неизвестен во время компиляции. Я подумал, что можно просто инициализировать класс с помощью параметра SampleObject и затем получить этот тип SampleObject для дальнейшего дальнейшего развития. Но похоже, что тип для всех операций должен быть известен во время компиляции? Есть ли способ обойти это или вы можете объяснить мне эту проблему?
кода приведенный выше пример только для иллюстрации моей дачи
Спасибо за помощь, Янис
Edit: Ваши ответы могут Allready бы решить эту проблему, я буду читать больше на темы «отражение» и «generics», и держите вас в курсе, если я сделаю какой-то прогресс. Так что спасибо за помощь.
Для тех, кто по-прежнему интересуется: Меня попросили задать вопрос и попытаться объяснить его как можно лучше.
Public Function ReadAllObjects() As List(Of myObjectType)
Dim result As New List(Of myObjectType)
Dim ObjectSerializer As New System.Xml.Serialization.XmlSerializer(result.GetType)
Dim FileReader As New System.IO.FileStream(My.Settings.XMLPath, System.IO.FileMode.Open)
result = TryCast(ObjectSerializer.Deserialize(FileReader), List(Of myObjectType))
FileReader.Close()
RaiseEvent ReadingFinished()
Return result
End Function
Это в значительной степени подводит итог того, что я хочу создать: A EasyXmlHandling.dll для дальнейшего использования, который будет инициализирован с используемым в настоящее время типа переменной. Затем предполагается, что он сможет писать и читать из/в XML-файл очень простым способом, просто называя «ReadAllObjects» (возвращает список myObjectType) или «AddObject (ByVal theNewObject)» ... (больше функций)
У меня есть все, что нужно для работы с пользовательским классом типа, поэтому теперь я могу легко повторно использовать код EasyXmlHandling, просто заменив этот тип в исходном коде любым новым классом, который я хочу использовать. Я бы предпочел просто вызвать DLL с образцом объекта (или его тип) и заставить его делать все остальное автоматически.
Я надеюсь, что понятно, но ни мой английский, ни мой технический словарь действительно хорошо;)
Так еще раз спасибо за помощь и для чтения через это. Я попытаюсь заставить его работать со всеми вашими предыдущими ответами и обновит тему, когда я сделаю дальнейший прогресс.
Вам нужно будет использовать дженерики ... что-то вроде этого 'Public Sub CreateGenericList (Of T) (ByVal SampleObject As T) Dim genericList As New List (Of T) End Sub' - синтаксис может быть немного выключен, но, надеюсь, это укажет вам в правильном направлении. – Tim
Не могли бы вы подробнее рассказать о своей конкретной проблеме? Зачем вам нужен общий список в вашем примере кода, а не только «List (Of Object)»? Вам нужно вызвать определенный общий метод? – sloth
Я только что отредактировал оригинальное сообщение, чтобы уточнить мою актуальную проблему. Думаю, с намеком на «дженерики» и «отражение» я смогу заставить его работать и, надеюсь, не потребует дальнейшей помощи. Но не стесняйтесь читать и отвечать на него :) Еще раз спасибо! – Janis