处理一系列自定义类列表的标准方法

时间:2014-08-11 21:51:38

标签: c# list win-universal-app

对于模糊的标题感到抱歉。我的问题如下:

我有一系列的类(classA,classB,classC ......),每个类都有一个列表。我希望能够让用户在这些列表中导入,导出,添加和删除。

我试图解决这个问题的方法是:

  • 创建一个公共的静态类作为全局类。
  • 为每个类创建一个列表(公共静态List aList = new List();)在全局类中。
  • 使用JSON保存&a​​mp;在实例之间加载列表(以及将来导入/导出)
  • 使用反射并为每个列表生成FieldInfo。
  • 将classA的FieldInfo发送到deleteObjectFromList页面
  • 尝试使用接口创建列表和列表列表

我显然无法将列表转换为列表,因为我不允许将classB的对象添加到classA列表中,即使它们都在实现接口。

我考虑过创建一个自定义的listClass并尝试以这种方式处理转换,但它看起来很混乱。

处理此问题的最佳方法是什么?我不想单独处理每个班级,因为实际上会有+20个班级。

由于请求了代码段,这是我的全局类。

public static class globalClass
{
    public static List<classA> characterList = new List<classA>();
    public static List<classB> raceList = new List<classB>();
    public static List<classC> deityList = new List<classC>();
}

我用于列表的一个自定义类

public class classA: IInterface
{
    public string getDisplayName()
    {
        return name;
    }

    //general info
    public String name;
}

我如何保存列表

private async Task saveItem<T>(List<T> list, string p)
    {
        var serializer = new DataContractJsonSerializer(list.GetType());

        //changed "LocalFolder" to "RoamingFolder"
        using (var stream = await ApplicationData.Current.RoamingFolder.OpenStreamForWriteAsync(
                            p,
                            CreationCollisionOption.ReplaceExisting))
        {
            serializer.WriteObject(stream, list);
        }

        System.Diagnostics.Debug.WriteLine("done writing!");
    }

我如何获取FieldInfo并将其传递到我的应用程序的下一页。

TypeInfo typeInfo = IntrospectionExtensions.GetTypeInfo(typeof(globalClass));
IEnumerable<FieldInfo> FieldInfoList = typeInfo.DeclaredFields;

foreach (FieldInfo f in FieldInfoList)
{
   Button deleteButton = new Button();
   deleteButton.Click += delegate(object sender, RoutedEventArgs e)
       {
          Frame.Navigate(typeof(deleteObjectFromLibraryPage), f);
       };
}

以及我是如何从我发送的fieldinfo获取实际列表的。

private List<IDisplayable> list;
protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        this.navigationHelper.OnNavigatedTo(e);

        FieldInfo f = (FieldInfo)e.Parameter;
        String s = f.GetValue(null).ToString();

        TypeInfo typeInfo = IntrospectionExtensions.GetTypeInfo(typeof(globalClass));
        IEnumerable<FieldInfo> FieldInfoList = typeInfo.DeclaredFields;

        var v = FieldInfoList.Where(c => c.GetType().Equals(f.GetType()));
        this.list = globalClass.getList(f);
    }

上面代码的最后一行是我陷入困境的地方,并想找出解决这个问题的标准方法。

0 个答案:

没有答案