2010-10-27 17 views
1

我有類似如下的一類使用內部列表:C#的隱式轉換到列表<T>返回運行時錯誤

public class MyList<T> : IEnumerable<T> 
{ 
     private List<T> _lstInternal; 
     public MyList() 
     { 
      _lstInternal = new List<T>(); 
     } 
     public static implicit operator List<T>(MyList<T> toCast) 
     { 
      return toCast._lstInternal; 
     } 

} 

當我試圖通過MyList<object>給帶有List<object>一個功能,我得到一個InvalidCastException的。爲什麼?

+0

您使用的是什麼版本的C#?我正在使用4.0,並且能夠在沒有'InvalidCastException'的情況下執行你在這裏描述的內容。 – Donut 2010-10-27 19:41:42

+0

是不是有一個原因,你不只是從'List '派生? – CodesInChaos 2010-10-27 19:49:16

+0

@CodeInChaos,那麼類的用戶將能夠改變列表或通過索引器訪問它。也許作者不想公開該功能。 – 2010-10-27 19:57:18

回答

1

使用您所描述的類,下面的代碼爲我工作:

static void Main(string[] args) 
{ 
    MyList<object> foo = new MyList<object>(); 

    MyMethod(foo); 
} 

static void MyMethod(List<object> things) 
{ 
    // No InvalidCastException when called... 
} 

我從你在你的問題張貼MyList<T>類唯一改變的是加入下列實施IEnumerable<T>

IEnumerator<T> IEnumerable<T>.GetEnumerator() 
{ 
    return _lstInternal.GetEnumerator(); 
} 

IEnumerator IEnumerable.GetEnumerator() 
{ 
    return _lstInternal.GetEnumerator(); 
} 

不知道爲什麼你會得到一個異常,除非我在我的評論中提到,我正在使用C#版本4.0。你使用什麼版本?

+0

其實我的問題是我將對象傳遞給一個不知道MyList類的不同項目,因此它不知道如何投射它。所以現在我只是在將MyList發送給其他項目之前投射MyList。 – Out4345 2010-10-27 20:11:25

相關問題