如何在C#中对对象类型进行强制转换?

时间:2010-06-25 03:52:27

标签: c# type-conversion

我有一个:

public class MyClass { 
 private string PrivateString; 
}

我有一个接受的界面:

object o

我有一个MyClass列表,我需要通过对象o,我的谷歌让我失望。使这项工作的程序是什么?我知道这一定很简单,但我还没有在C#中进行类型转换。

3 个答案:

答案 0 :(得分:4)

MyClass my = new MyClass();
WhateverTheFunctionThatTakesObjectIs(my);

一切都会隐含地转向对象。

答案 1 :(得分:2)

List<MyClass>对象仍然只能传递给您的接口实现,因为List可以隐式地转换为object(和所有对象一样)。如果编译器因为您设置代码的方式而抱怨(我必须说因为您实际上没有向我们展示过任何代码),那么您可以明确地将其编译:

myInterfaceFunction((object) myList);

或:

myInterfaceFunction(myList as object);

如果您想要投射列表的内容并在已有List<object>时传递List<MyClass>,那么您可以这样做:

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

(如果您的界面功能使用IEnumerable<object>而不是List<object>),您可以摆脱 ToList()

这是一个简单的例子。这清楚地说明了我关于明确转换为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 { }
}

答案 2 :(得分:0)

您不需要进行任何类型转换以将MyClass对象用于获取对象参数的方法,但是您可能在将MyClass对象列表转换为对象列表时遇到问题