如何对C#中的对象类型进行强制转换?
问题描述:
我有一个:如何对C#中的对象类型进行强制转换?
public class MyClass {
private string PrivateString;
}
,我有一个接受的界面:我有我需要通过对象o推,我的谷歌失败我MyClass的名单
object o
。什么是做这个工作的程序?我知道这一定很疯狂,但我还没有在C#中进行类型转换。
答
MyClass my = new MyClass(); WhateverTheFunctionThatTakesObjectIs(my);
所有内容都会隐式转换为对象。
答
你没有必要做任何类型的铸件使用MyClass的对象用于拍摄对象参数的方法,但是你可能有铸造MyClass的对象列表对象
答
的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 { }
}