Как получить тип экземпляра объекта и использовать его для приведения другого объекта в C#?

Я пытаюсь преобразовать базовый объект в производный объект.

Вот так:

DerivedClass castedBaseObject = (randomDerivedObject.GetType())originalBaseObject;

Приведенный выше пример не работает, выдавая следующую ошибку: error CS1003: Syntax error, ',' expected

Можете ли вы предоставить немного больше контекста относительно того, почему вы хотите достичь этого?

Bijington 14.12.2020 21:57

@Bijington Это долго, в основном я работаю с API и пытаюсь обернуть класс вокруг уже определенных классов, при использовании уже определенных методов они возвращают базовый класс (тип), поэтому для того, чтобы я мог использовать обертку Я написал (что заняло у меня довольно много времени), я должен создать базовый объект. Я использую довольно много разных классов-оболочек, поэтому я хотел бы выполнять итерацию и динамическое приведение.

Nomnom 14.12.2020 22:01

Если вы ничего не знаете о типе во время компиляции, это невозможно с ключевым словом var, так как оно ожидает статический тип. Однако вы можете использовать ключевое слово dynamic.

Xaver 14.12.2020 22:03

Для преобразования см. ответы, например. stackoverflow.com/questions/9009986/… и stackoverflow.com/questions/4010144/…

Peter Duniho 14.12.2020 22:21

@xaver извините, исправил.

Nomnom 14.12.2020 22:30
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
5
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если у вас есть конечное число типов (назовем их MyClass1, MyClass2, ..., MyClassN) и вы знаете, что ваш объект originalBaseObject имеет один из этих типов, вы можете сделать следующее:

if (originalBaseObject is MyClass1 tmp1)
{
    // do something with tmp1
}
else if (originalBaseObject is MyClass2 tmp2)
{
    // do something with tmp2
}
// ...
// and the last type
else if (originalBaseObject is MyClassN tmpN)
{
    // do something with tmpN
}
else {
    throw new Exception("Non of the given types");
}

Другие вопросы по теме