Как сделать приведение к типу объекта в C #? - PullRequest
3 голосов
/ 25 июня 2010

У меня есть:

public class MyClass { 
 private string PrivateString; 
}

и у меня есть интерфейс, который принимает:

object o

У меня есть список MyClass, который мне нужно протолкнуть через объект o, и мой Google подводит меня. Какова процедура, чтобы сделать эту работу? Я знаю, что это должно быть безумно просто, но мне еще предстоит выполнять приведение типов в C #.

Ответы [ 3 ]

4 голосов
/ 25 июня 2010
MyClass my = new MyClass();
WhateverTheFunctionThatTakesObjectIs(my);

Все будет неявно приведено к объекту.

2 голосов
/ 25 июня 2010

Объект List<MyClass> все еще может быть просто передан вашей реализации интерфейса, потому что List может быть неявно приведен к object (как и все объекты).Если компилятор жалуется из-за того, как вы настроили свой код (я должен сказать, что, поскольку вы на самом деле не показывали нам какой-либо код), вы можете явно привести его:

myInterfaceFunction((object) myList);

или:

myInterfaceFunction(myList as object);

Если вы хотите разыграть содержимое списка и передать List<object>, когда у вас уже есть List<MyClass>, тогда вы можете просто сделать это:

myInterfaceFunction(myList.Cast<object>().ToList());

(вы можете избавиться от ToList () , если ваша интерфейсная функция использует IEnumerable<object> вместо List<object>).

Вот краткий пример.Это хороший пример моего комментария о явном приведении к object - по умолчанию вызов MyFunction(myList) перейдет к функции MyFunction(IEnumerable<object> blah) - вы должны явным образом привести его к принудительному переходу к функции MyFunction(object blah).

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<MyObject> myList = new List<MyObject>();

            MyFunction(myList);
            MyFunction((object)myList);
            MyFunction(myList.Cast<object>().ToList());
            MyFunction(myList.Cast<object>());
        }


        public static void MyFunction(List<object> blah)
        {
            Console.WriteLine(blah.GetType().ToString());
        }

        public static void MyFunction(IEnumerable<object> blah)
        {
            Console.WriteLine(blah.GetType().ToString());
        }

        public static void MyFunction(object blah) 
        {
            Console.WriteLine(blah.GetType().ToString());
        }
    }


    public class MyObject { }
}
0 голосов
/ 25 июня 2010

Вам не нужно было выполнять приведение типов для использования объекта MyClass для метода, принимающего аргумент объекта, однако у вас могут возникнуть проблемы с приведением списка объектов MyClass к списку объектов

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