c# - 用泛型抽象一个类

标签 c# wpf entity-framework generics mvvm

我一直在学习泛型,并且对它有一些很好的理解。基本上,泛型似乎是在运行时确定的某种类型的占位符。一般是字母T指定一个通用名称,但不仅限于该字母/名称。

所以重新发明轮子,我可以有一个可以将任何类型的列表转换为数组的方法,就像这样

public static T[] ConvertListToArray<T>(List<T> list) {
    int count = list.Count;
    T[] array = new T[count];
    for (int i = 0; i < count; i++)
        array[i] = list[i];
    return array;
}

现在我试图把它用在我想用于所有 View 模型的基类中。假设我有一个名为 IModelViewModel 的接口(interface)(任何 EF 模型类的 View 模型)
public interface IModelViewModel<T>
{
    T Model { get; set; }

    bool IsNewRecord { get; set; }

    void ConvertModelToViewModel();

    void UpdateModelFromViewModel();

    void SaveToDb();

    void UpdateInDb();
}  

我的逻辑是,任何为表示来自 EF 的直接 poco 而创建的 View 模型都必须具有 Model保存原始 EF Poco 的属性,一个 bool 值,指示它是否是要添加的新记录,一个转换为 ViewModel 的方法(它基本上通过模型填充 this viewmodel 的属性,一个 UpdateModelFromViewModel 方法从 View 中更新模型 -有界 View 模型,一个保存方法和一个更新方法。在这种情况下,T 是为了抽象接口(interface),以便它可以容纳 任何我放入的 poco。

现在这里是基类。
public class ModelViewModelBase<T> : DependencyObject, Interfaces.IModelViewModel<T>
{
    public T Model { get; set; }
    public bool IsNewRecord { get; set; }

    public ModelViewModelBase(T model)
    {
        if (model == null || model.id == 0)
        {

            this.IsNewRecord = true;
            Model = new T();
        }
        else
        {
            this.IsNewRecord = false;
        }
    }


    public void ConvertModelToViewModel()
    {
        throw new NotImplementedException();
    }

    public void UpdateModelFromViewModel()
    {
        throw new NotImplementedException();
    }

    public void SaveToDb()
    {
        throw new NotImplementedException();
    }

    public void UpdateInDb()
    {
        throw new NotImplementedException();
    }
}  

这个想法是:每个 ModelViewModel 子类都必须有一个 EF poco 对象作为它的模型属性。构造类时, bool 值 IsNewRecord必须根据 EF Poco 的状态来设置。由于我没有使用 100% 正确的泛型,因此该类本身不起作用。这甚至可能是我在做什么?如果不是,那么获得此功能的最佳方法是什么?

最佳答案

您需要添加约束:

public class ModelViewModelBase<T> : DependencyObject, IModelViewModel<T> where T:Model, new()

(假设 Model 是模型的基类)

关于c# - 用泛型抽象一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23846759/

相关文章:

c# - 如何在 LINQ 中进行 STAR 搜索

c# - 为什么表单中的表单在 Internet Explorer 中不起作用

.net - .net 的桌面多线程 UI 示例应用程序

c# - 强制 Entity Framework 在一次往返中更新多个记录。

c# - 方法未找到 : 'System.Object Microsoft.EntityFrameworkCore.Infrastructure.IAnnotatable.get_Item(System.String)'

c# - 获取枚举实例的名称

c# - WPF 在控件中添加自定义属性

c# - MVVM 命令选择最后添加的项目

c# - 附加命令

entity-framework - Entity Framework - 获取对象作为集合