如何修改MongoDB通用插入函数以支持任意类插入?
C# MongoDB 通用插入函数实现
需求背景
原本针对Game类的MongoDB插入函数仅支持单一类型,现在需要改造为通用函数,实现向指定集合插入任意实体类实例的功能。
通用实现方案
利用C#泛型实现类型安全的通用插入函数,代码如下:
void Insert<T>(T obj, string collectionName) where T : class { var collection = database.GetCollection<T>(collectionName); collection.InsertOne(obj); }
关键说明
- 泛型参数
<T>让函数适配任意实体类,where T : class约束确保传入的是引用类型(契合MongoDB实体类的使用场景) - 直接通过
T指定GetCollection<T>的类型参数,无需手动反射获取类型,兼顾性能与编译时类型检查
使用示例
// 插入MyClass1实例 MyClass1 c1 = new MyClass1(); // 为c1设置属性值 Insert(c1, "MyClass1"); // 插入MyClass2实例 MyClass2 c2 = new MyClass2(); // 为c2设置属性值 Insert(c2, "MyClass2");
关于object参数方案的问题
如果用object作为参数,需要通过反射调用GetCollection的泛型重载,不仅代码冗余,还会引入反射的性能开销,同时失去编译时类型检查,容易引发运行时错误。泛型方案是更优的选择。
内容的提问来源于stack exchange,提问作者Emre Özincegedik
相关产品推荐
相关产品推荐

