我有一个:
public class MyClass {
private string PrivateString;
}
我有一个接受的界面:
object o
我有一个MyClass列表,我需要通过对象o,我的谷歌让我失望。使这项工作的程序是什么?我知道这一定很简单,但我还没有在C#中进行类型转换。
答案 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对象列表转换为对象列表时遇到问题