我甚至不認爲我的問題是正確的,因爲我剛開始使用泛型,而且我的知識並不是很好。如何返回一個通用列表?
說我有以下方法:
public class Wrapper
{
public List<TInfoType> GetInfo<TInfoType>(Array data, EdmCmd edmCmd)
{
switch (edmCmd.meCmdType)
{
case EdmCmdType.EdmCmd_PostAdd:
List<EdmCmdPostAddInfo> info = new List<EdmCmdPostAddInfo>();
foreach (EdmCmdData item in data)
{
info.Add(new EdmCmdPostAddInfo(item.mlObjectID1, item.mlObjectID2, item.mbsStrData1, item.mlLongData1));
}
return info;
break;
default:
break;
}
}
}
而且我想打電話給像方法:
List<EdmCmdPostAddInfo> info = wrapper.GetInfo<EdmCmdPostAddInfo>(data, edmCmd)
什麼是做這種正確的方法是什麼?我得到的錯誤:
Cannot implicitly convert type 'System.Collections.Generic.List<EPDM.Utils.EdmCmdPostAddInfo>' to 'System.Collections.Generic.List<TInfoType>'
我這樣做是因爲傳遞給方法的EdmCmd結構具有一般命名爲各個成員。很難記住每個CmdType成員代表什麼,所以我將它們包裝在一個更有意義的結構中。
不是一個答案,但我認爲你遇到了問題,泛型在C#3.0下是不變的。用C#4.0編譯:http://visualstudiomagazine.com/Articles/2009/05/01/Generic-Covariance-and-Contravariance-in-C-40.aspx?Page=1 – 2009-11-07 23:38:54