經過近20年的使用Visual FoxPro,我正在遭受強大的類型語言。 :)。轉換列表<SomeObject>轉至列表<T>?
我試圖創建一個通用的方法,使用一個接口來設置DataGrid.ItemsSource
屬性。
在這裏,我們去...
首先,我有一個類(POCO):
public class PersonVO
{
public int PersonID { get; set; }
public string Name { get; set; }
}
然後我創建了一個接口:
public interface IBussiness
{
List<T> GetAll<T>();
}
然後,其他類實現這個接口...
public class PersonBLL : IBussiness
{
public List<PersonVO> CreateNewList()
{
List<PersonVO> list = new List<PersonVO>();
list.Add(new PersonVO() { PersonID = 1, Name = "Robert" });
list.Add(new PersonVO() { PersonID = 2, Name = "Julie" });
list.Add(new PersonVO() { PersonID = 3, Name = "Bernard" });
return list;
}
public List<T> GetAll<T>()
{
return CreateNewList();
}
}
聲明return CreateNewList()
顯示了一個錯誤:
C#: An instance of type 'System.Collections.Generic.List' can not be returned by a method of type 'System.Collections.Generic.List'
所以我改變了這種方法:
public List<T> GetAll<T>()
{
return CreateNewList() as List<T>;
}
它編譯!
現在,我的問題開始......我有一個WPF usercontrol MyTabItemList
。我的觀點是,我在運行時創建了一個新的WPF TabItem,並注入了我的BLL類(在本例中爲PersonBLL
,但在現實世界中,我有很多它們......)。
MyTabItemList myTabItem = new MyTabItemList(new PersonBLL());
MyTabItemList是這樣的:
public partial class MyTabItemList : TabItem
{
IBussiness oBLL;
public MyTabItemList(IBussiness oBLL)
{
InitializeComponent();
this.oBLL = oBLL;
MyGrid.ItemsSource = oBLL.GetAll<object>();
}
}
它運行正常,但不工作像我想它。
oBLL.GetAll<object>()
總是返回null
。
如果我改變<object>
到<PersonBLL>
(如下圖所示),它的工作原理,但在這種情況下MyTabItemList
只是工作與PersonBLL
類:
MyGrid.ItemsSource = oBLL.GetAll<PersonBLL>();
我應該怎麼做,使其工作?
一分鐘....試試吧! –
太棒了! .....只有一個錯字(我認爲)。 public List GetAll(){...} /// GetAll和()之間沒有,right ??? ... 謝謝! –
哦,我已經解決了答案。 –