Привести универсальный c ChildFolder <SomeType>к ChildFolder <object>? - PullRequest
0 голосов
/ 01 мая 2020

У меня есть тип generi c, который в основном является оберткой для другого класса (для целей сериализации), ChildFolder<SomeType>.

    [Serializable]
    public class ChildFolder<T>
    {
        public T value;
    }

У меня есть ссылка на ChildFolder <>, который в настоящее время имеет тип object. Мне нужно иметь доступ к .value этого объекта, независимо от того, что это за T - получить его как object идеально. Я надеялся, что обобщенные типы c будут следовать правилам наследуемости класса параметров, чтобы это работало:

object obj = new ChildFolder<SomeClass>(); // (this is equivalent to what's coming in to the function as a parameter)

ChildFolder<object> chObj = (ChildFolder<object>)obj;
// and now chObj.value is of type object

Но эта строка дает мне InvalidCastException: Specified cast is not valid.

Как можно Я вписываю в ChildFolder, если не знаю, что такое <T>? С другой стороны, как я могу получить доступ к .value без его ввода?

1 Ответ

0 голосов
/ 01 мая 2020

Обновление: я решил проблему, создав не базовый c базовый класс:

    [Serializable]
    public class ChildFolder<T> : ChildFolderBase
    {
        public T value
        {
            get
            {
                return (T)valueAsObject;
            }
            set
            {
                valueAsObject = value;
            }
        }

        public static implicit operator T(ChildFolder<T> cf)
        {
            return cf.value;
        }
    }

    public class ChildFolderBase
    {
        public object valueAsObject;
    }

. Я могу легко привести его к ChildFolderBase и получить .valueAsObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...