【发布时间】:2010-06-25 03:52:26
【问题描述】:
我有一个:
public class MyClass {
private string PrivateString;
}
我有一个接受的接口:
object o
我有一个 MyClass 列表,我需要通过对象 o 推送,而我的 Google 失败了。使这项工作的程序是什么?我知道这一定很简单,但我还没有在 C# 中进行类型转换。
【问题讨论】:
标签: c# type-conversion
我有一个:
public class MyClass {
private string PrivateString;
}
我有一个接受的接口:
object o
我有一个 MyClass 列表,我需要通过对象 o 推送,而我的 Google 失败了。使这项工作的程序是什么?我知道这一定很简单,但我还没有在 C# 中进行类型转换。
【问题讨论】:
标签: c# type-conversion
一切都会隐式转换为对象。
【讨论】:
List<MyClass> 对象仍然可以直接传递给您的接口实现,因为 List 可以隐式转换为 object(所有对象都可以)。如果编译器因为您设置代码的方式而抱怨(我不得不说,因为您实际上没有向我们展示任何代码),那么您可以显式转换它:
myInterfaceFunction((object) myList);
或:
myInterfaceFunction(myList as object);
如果您想转换列表的内容,并在已有List<MyClass> 时传递List<object>,那么您可以这样做:
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 { }
}
【讨论】:
您无需进行任何类型转换即可将 MyClass 对象用于采用对象参数的方法,但是您可能在将 MyClass 对象列表转换为对象列表时遇到问题
【讨论】: