Каст обьектов в рантайме

114
28 июля 2019, 21:10

Дано 1:

public abstract class BaseEntityViewModel<T> where T : RealmObject
{
    public T SomeMethod()`;
    //какие-то проперти
}
public class SomeClass1 :RealmObject {}
public class SomeClass2 :RealmObject {}

Дано 2:

IList<T> origObjList; //List<RealmObject> -- получаю его в рантайме
IEnumerator<T> currObjList; // List<BaseEntityViewModel<SomeClass>> -- получаю его в рантайме

Итак здесь сразу 2 вопроса:

  1. Как мне сказать что-то вроде:

     ((where have SomeMethod)currObjList).SomeMethod();
    

    То есть как мне сказать предкомпилятору что я могу вызывать метод SomeMethod() при этом не указывая напрямую тип? (я его наперед просто не знаю, а указывать родительский класс или интерфейс не могу) Даже если я получу object как работу метода -- не важно.

  2. Я знаю что я могу получить из дано2 значение типа Т в рантайме; Как мне кастовать в рантайме результат прошлого пункта в даный Т? Если учесть, что конвертирование скорее всего не сработает... Как мне сделать запись "(TypeSomeType)objectRez" когда TypeSomeType хранится в someTypeVariable

Answer 1
T result = (T)(obj.GetType().GetMethod("SomeMethod")?.Invoke(obj, null));
READ ALSO
FastColoredTextBox

FastColoredTextBox

Через NuGet установил данную библиотеку

104
Случайные вопросы

Случайные вопросы

Как можно реализовать с помощью генератора случайных вопросов считывания с файла *xml, для теста? Чтобы вопросы не шли по порядку, а в случайном...

167
Как работает spl_autoload_register?

Как работает spl_autoload_register?

В документации написано, что одним из аргументов spl_autoload_register передаётся функция autoloadОбъясните подробно, как работает функция spl_autoload_register...

119