2010-06-25 161 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 { } 
} 
相關問題