【发布时间】:2013-09-29 15:27:32
【问题描述】:
这适用于使用 .Net 4.5 的 Windows 8.1 Store 应用
我发现自己为我拥有的每个“对象”复制了相同的代码。所以我试图创建一个更通用的方法来以我想要的方式获取所有数据。最初对我的不同对象来说,一切都是<Typed>,但现在我正在尝试使用通用的<Object>。
public async Task<ObservableCollection<object>>selectAll()
{
var Items = await Win8StorageHelper.LoadData("person.dat", typeof(ObservableCollection<object>));
ObservableCollection<object> ItemsList = new ObservableCollection<object>();
if (typeof(Int32) == Items.GetType())
{
//Not Needed anymore
}
else
{
ItemsList = (ObservableCollection<object>)Items;
}
_list.Clear();
foreach (object item in ItemsList)
{
_list.Add(item);
}
return _list;
}
我有我原来的集合 _frequencyList,现在有一个新的通用集合 _list:
private ObservableCollection<win8Chores.Model.databaseTables.Frequency> _frequencyList;
public ObservableCollection<Object> _list = new ObservableCollection<Object>();
我正在尝试这样调用我的新方法:
_frequencyList = await selectAll();
但是,我收到一个错误:
不能隐式转换类型 'System.Collections.ObjectModel.ObservableCollection' 到 'System.Collections.ObjectModel>observableCollection'
我需要做什么才能使此代码正常工作?我什至走在正确的轨道上吗?任何帮助表示赞赏。
更新: 这些是我试图为通用示例重构的原始方法:
public async Task<ObservableCollection<Person>> selectAllPersons()
{
var personItems = await Win8StorageHelper.LoadData("person.dat", typeof(ObservableCollection<Person>));
ObservableCollection<Person> personItemsList = new ObservableCollection<Person>();
if (typeof(Int32) == personItems.GetType())
{
//Not Needed anymore
}
else
{
personItemsList = (ObservableCollection<Person>)personItems;
}
_personList.Clear();
foreach (Person item in personItemsList)
{
_personList.Add(item);
}
return _personList;
}
public async Task<ObservableCollection<Frequency>> selectAllFrequencies()
{
var frequencyItems = await Win8StorageHelper.LoadData("frequency.dat", typeof(ObservableCollection<Frequency>));
ObservableCollection<Frequency> frequencyItemsList = new ObservableCollection<Frequency>();
if (typeof(Int32) == frequencyItems.GetType())
{
//Not Needed anymore
}
else
{
frequencyItemsList = (ObservableCollection<Frequency>)frequencyItems;
}
_frequencyList.Clear();
foreach (Frequency item in frequencyItemsList)
{
_frequencyList.Add(item);
}
return _frequencyList;
}
public async Task<ObservableCollection<Chore>> selectAllChores()
{
var choreItems = await Win8StorageHelper.LoadData("chore.dat", typeof(ObservableCollection<Chore>));
ObservableCollection<Chore> choreItemsList = new ObservableCollection<Chore>();
if (typeof(Int32) == choreItems.GetType())
{
//Not Needed anymore
}
else
{
choreItemsList = (ObservableCollection<Chore>)choreItems;
}
_choreList.Clear();
foreach (Chore item in choreItemsList)
{
_choreList.Add(item);
}
return _choreList;
}
【问题讨论】:
-
为什么你现在使用
object而不是你的特定类型? -
我正在为每种类型重写相同的方法。我认为它可以被重构,所以我不必一遍又一遍地重写相同的方法。这不是正确的方法吗?
-
听起来像是泛型的案例。这使您可以保留类型并保持灵活性。
-
标签: c# generics windows-runtime .net-4.5