Подтвердить что ты не робот

Как удалить объект С# с динамическим типом

Я пытаюсь сделать что-то вроде этого:

void someMethod(TypeA object) { ... }

void someMethod(TypeB object) { ... }

object getObject()
{
    if (...) return new TypeA();
    else return new TypeB();
}

object obj = getObject();
(obj.GetType()) obj;  // won't compile
someMethod(obj);

Очевидно, я здесь смущен. Я знаю, что могу сделать эту работу, просто выписав условное утверждение -

if (obj.GetType() == typeof(TypeA)) obj = (TypeA)obj;
else if (obj.GetType() == typeof(TypeB)) obj = (TypeB)obj;

- но нет ли способа сделать это во время выполнения?

ИЗМЕНИТЬ Я согласен, кажется, что это не лучший выбор дизайна, так что вот контекст. Точкой вышеописанного кода является базовый класс репозитория для Mongo DB. Я хочу, чтобы он мог обрабатывать различные типы таблиц. Итак, someMethod() фактически удаляется; и TypeA и TypeB - ObjectID и Guid; код внизу является частью метода удаления агностического типа, который принимает идентификатор в виде строки; и getObject() - это метод для анализа параметра ID.

4b9b3361

Ответ 1

Если вы используете .NET 4 и С# 4, вы можете использовать dynamic для этого:

dynamic obj = GetObject();
SomeMethod(obj);

В противном случае вам нужно будет использовать отражение, чтобы найти и вызвать правильный метод. Разрешение перегрузки (для типов dynamic) выполняется во время компиляции.

(Обратите внимание, что если TypeA и TypeB не являются структурами, вы все равно не будете распаковываться...)