C#generic T函数,其中T来自字符串

时间:2016-09-06 10:04:00

标签: c# generic-programming

我在设备和服务器之间为大型数据库创建同步功能。我有很多列表表(下拉/选择器中的项目)。 我不想写很多代码,而且我正在寻找一个优雅的解决方案:)

在SQLite中的设备上,我定义了列表表,如

    public class NameTable : IBusinessEntity {
        public int Id { get; set; } = 0;
        public string Description { get; set; }
    }

当我在数据库中保存新记录(项目)时,我称之为

    public int SaveItem<T>(T item) where T : IBusinessEntity {
        lock (locker) {
            if (item.Id != 0) {
                database.Update(item);
                return item.Id;
            }
            else {
                return database.Insert(item);
            }
        }
    }

现在,当设备从服务器收到新记录时,结构就像

    public class SyncResult {
        public int DeviceId { get; set; }
        public int ServerId { get; set; }
        public string TableName { get; set; }
        public string Description { get; set; }
    }

然后我要保存(如果 DeviceId == 0 或更新现有项目,则插入新记录)。

我的问题是:如何从 SyncResult 中调用 SaveItem ,其中 T TableName

提前感谢您的帮助(我可以为此提供啤酒!)

SaveItemMyDatabase班级的成员。基本上我的问题是如何将T作为字符串传递给SaveItem<T>

我不知道我是否清楚地解释了我的问题。

1 个答案:

答案 0 :(得分:0)

您可以将TableName映射到Type,例如Dictionary<string,Type>使用Activator类构建类型。使用反射来填充数据。