经过近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 ??? ... 谢谢! –
哦,我已经解决了答案。 –