Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有可观测集合的泛型方法_C#_Generics_Windows Runtime_.net 4.5 - Fatal编程技术网

C# 具有可观测集合的泛型方法

C# 具有可观测集合的泛型方法,c#,generics,windows-runtime,.net-4.5,C#,Generics,Windows Runtime,.net 4.5,这适用于使用.Net 4.5的Windows 8.1应用商店应用程序 我发现自己为我拥有的每个“对象”复制了相同的代码。因此我尝试创建一个更通用的方法,以我想要的方式获取所有数据。最初,我的不同对象的所有内容都是,但现在我尝试使用通用的 但是,我得到了一个错误: 无法隐式转换类型 'System.Collections.ObjectModel.ObservableCollection'到 'System.Collections.ObjectModel>observableCollection'

这适用于使用.Net 4.5的Windows 8.1应用商店应用程序

我发现自己为我拥有的每个“对象”复制了相同的代码。因此我尝试创建一个更通用的方法,以我想要的方式获取所有数据。最初,我的不同对象的所有内容都是
,但现在我尝试使用通用的

但是,我得到了一个错误:

无法隐式转换类型 '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;
    }
public异步任务selectAllPersons()
{
var personItems=await Win8StorageHelper.LoadData(“person.dat”,typeof(observeCollection));
ObservableCollection personimslist=新的ObservableCollection();
if(typeof(Int32)=personItems.GetType()
{
//不再需要了
}
其他的
{
personimslist=(ObservableCollection)personims;
}
_personList.Clear();
foreach(人员列表中的人员项目)
{
_人员列表。添加(项目);
}
返回个人列表;
}
公共异步任务selectAllFrequencies()
{
var frequencyItems=等待Win8StorageHelper.LoadData(“frequency.dat”,typeof(observeCollection));
ObservableCollection frequencyItemsList=新的ObservableCollection();
if(typeof(Int32)=frequencyItems.GetType())
{
//不再需要了
}
其他的
{
frequencyItemsList=(ObservableCollection)frequencyItems;
}
_frequencyList.Clear();
foreach(frequencyItemsList中的频率项)
{
_频率列表。添加(项);
}
返回频率列表;
}
公共异步任务selectAllChores()
{
var choreItems=await Win8StorageHelper.LoadData(“chore.dat”,typeof(observeCollection));
ObservableCollection choreItemsList=新的ObservableCollection();
if(typeof(Int32)=choreItems.GetType())
{
//不再需要了
}
其他的
{
choreItemsList=(ObservableCollection)choreItems;
}
_choreList.Clear();
foreach(choreItemsList中的杂务项)
{
_添加(项目);
}
返回列表;
}

我认为您应该为此使用泛型;看

公共异步任务selectAll(字符串文件名)
{
var Items=await Win8StorageHelper.LoadData(文件名、类型(ObservableCollection));
如果(项目是可观察的集合)
{
return((ObservableCollection)项).ToList();
}
其他的
{
//空或不是正确的类型;取决于storage helper提供的内容
返回新的ObservableCollection();
}
}
叫来

var personList = selectAll<Person>("person.dat");
var frequencyList = selectAll<Person>("frequency.dat");
var personList=selectAll(“person.dat”);
var frequencyList=selectAll(“frequency.dat”);

我认为您应该为此使用泛型;看

公共异步任务selectAll(字符串文件名)
{
var Items=await Win8StorageHelper.LoadData(文件名、类型(ObservableCollection));
如果(项目是可观察的集合)
{
return((ObservableCollection)项).ToList();
}
其他的
{
//空或不是正确的类型;取决于storage helper提供的内容
返回新的ObservableCollection();
}
}
叫来

var personList = selectAll<Person>("person.dat");
var frequencyList = selectAll<Person>("frequency.dat");
var personList=selectAll(“person.dat”);
var frequencyList=selectAll(“frequency.dat”);

你需要这样的东西

public async Task<ObservableCollection<T>> selectAllItems<T>(ObservableCollection<T> _list)
{
    var items = await Win8StorageHelper.LoadData(string.Format("{0}.dat",typeof(T).Name.ToLower()), typeof(ObservableCollection<T>));

    _list.Clear();
    if(!(items is ObservableCollection<T>))
    {
         return _list;
    }

    ObservableCollection<T> itemsList = (ObservableCollection<T>)items;        
    foreach (T item in itemsList)
    {
        _list.Add(item);
    }

    return _list;
}

你需要这样的东西

public async Task<ObservableCollection<T>> selectAllItems<T>(ObservableCollection<T> _list)
{
    var items = await Win8StorageHelper.LoadData(string.Format("{0}.dat",typeof(T).Name.ToLower()), typeof(ObservableCollection<T>));

    _list.Clear();
    if(!(items is ObservableCollection<T>))
    {
         return _list;
    }

    ObservableCollection<T> itemsList = (ObservableCollection<T>)items;        
    foreach (T item in itemsList)
    {
        _list.Add(item);
    }

    return _list;
}

为什么现在使用
object
而不是特定的类型?我正在为每种类型重新编写相同的方法。我认为它可以被重构,这样我就不必一遍又一遍地重写同一个方法。这不是正确的方法吗?听起来像是泛型的例子。这允许您保留类型并保持灵活性。不是通用的吗?如何将上面的代码转换为“泛型”?为什么现在使用
object
而不是特定类型?我正在为每种类型重新编写相同的方法。我认为它可以被重构,这样我就不必一遍又一遍地重写同一个方法。这不是正确的方法吗?听起来像是泛型的例子。这允许您保留类型并保持灵活性。不是通用的吗?如何将上面的代码转换为“泛型”代码?我也在研究它,发现一个错误,表示找不到类型或命名空间“T”。是否缺少引用或程序集。我检查了,我确实使用了System.Collections.Generic;如果你做这个任务,它应该会起作用;或通过类类型或方法参数类型引用;可能会发布一个更大的可运行示例(LINQpad对此很好),如果我有3个对象都将使用此函数,我们将能够提供更好的帮助。这与重写3次相同吗?-看我更新的问题一种方法就足够了;请参阅修改后的答案。每当我尝试在代码中实现此功能时,我总是在“T”上出错:找不到命名空间名称“T”。。。我错过了什么?包含此方法的类是否需要是泛型的?我也在研究这个问题,并得到一个错误,该错误表示找不到类型或命名空间“T”。是否缺少引用或程序集。我检查了,我确实使用了System.Collections.Generic;如果你做这个任务,它应该会起作用;或通过类类型或方法参数类型引用;可能会发布一个更大的可运行示例(LINQpad对此很好),如果我有3个对象都将使用此函数,我们将能够提供更好的帮助。这与重写3次相同吗?-请参阅我更新的问题一方法
var personList = selectAll<Person>("person.dat");
var frequencyList = selectAll<Person>("frequency.dat");
public async Task<ObservableCollection<T>> selectAllItems<T>(ObservableCollection<T> _list)
{
    var items = await Win8StorageHelper.LoadData(string.Format("{0}.dat",typeof(T).Name.ToLower()), typeof(ObservableCollection<T>));

    _list.Clear();
    if(!(items is ObservableCollection<T>))
    {
         return _list;
    }

    ObservableCollection<T> itemsList = (ObservableCollection<T>)items;        
    foreach (T item in itemsList)
    {
        _list.Add(item);
    }

    return _list;
}
selectAllItems(_personList);
selectAllItems(_frequencyList); //etc