2010-06-25 105 views
3

我有一个:如何对C#中的对象类型进行强制转换?

public class MyClass { 
private string PrivateString; 
} 

,我有一个接受的界面:我有我需要通过对象o推,我的谷歌失败我MyClass的名单

object o 

。什么是做这个工作的程序?我知道这一定很疯狂,但我还没有在C#中进行类型转换。

回答

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

所有内容都会隐式转换为对象。

0

你没有必要做任何类型的铸件使用MyClass的对象用于拍摄对象参数的方法,但是你可能有铸造MyClass的对象列表对象

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 { } 
} 
相关问题