Привести объект в список <object> - PullRequest
1 голос
/ 08 апреля 2020

По некоторым причинам вне моего контроля мой метод должен быть определен для принятия одного параметра типа объекта. Но я знаю, что значение этого параметра на самом деле относится к типу List с неизвестным мне обобщенным параметром c.

Я пытаюсь привести этот объект к List , но понятия не имею, как сделать это, не зная, какой именно параметр generi c.

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

public static List<object> ConvertToList(object input)
{
    if (input.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List<>))) 
    {
        //Of course this does not work, because input might for example be of type List<string>
        return (List<object>) input;
    }
    else
    {
        return null;
    }
}

Я знаю, что если бы у меня было List<T> вместо object input, это было бы довольно просто, используя:

return input.Cast<object>()

, но, к сожалению, я застрял с параметром объекта. Любая идея, как я мог решить эту проблему?

1 Ответ

8 голосов
/ 08 апреля 2020

Вы не можете разыграть его, но вы можете спроецировать его на список, используя IEnumerable и Cast. Это даст вам новый экземпляр List<object>. Вы не сможете изменить старый список, но вы можете работать с новым и изменять его элементы.

object obj = new List<Whatever>();
List<object> list = ((IEnumerable)obj).Cast<object>().ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...