从对象类型转换回自定义对象并改进代码

Meelfan Bmfp

我有一段很不错的代码,其中我在对象类型的集合中打包了几种类型的对象。它们需要插入数据库中。我使用EF core 2.1和一个流行的扩展名为EFCore.BulkExtensions,位于代码下方:

 List<object> mappedContent = MapContent(elements, mappings);// a million records

List<typeA> tAlist= new List<typeA>();
List<typeB> tBlist= new List<typeB>();
List<typeC> tClist= new List<typeC>();


            foreach (var record in mappedContent)
            {
                switch (record.GetType().Name)
                {
                    case "TypeA":
                        tAlist.Add((TypeA)record);
                        break;
                    case "typeB":
                        tBlist.Add((typeB)record);
                        break;
                    case "typeC":
                        tClist.Add((typeC)record);
                        break;
                   default:
                    Throw new Exception(" Unknown type");

}
}

 context.BulkInsert(tAlist);
 context.BulkInsert(tBlist);
 context.BulkInsert(tClist );

我有20多种不同的对象类型,我想知道我是否可以避免代码中的某些重复。另外,我想做到这一点而不影响性能,甚至不能提高当前性能,这要归功于我使用的库。

提前谢谢了

一般

听起来像是一份工作 OfType

根据指定的类型过滤IEnumerable的元素。

var tAlist = mappedContent.OfType<TypeA>();
// do wonderful fun stuff with a list of TypeA

注意,在性能方面,这可能会比您使用的要好。但是来源OfType基本上是

foreach (object obj in source) 
{
    if (obj is TResult) yield return (TResult)obj;
}

每次调用它基本上都是时间复杂度O(n)。

如果您想要一种更高效,更冗长的方法,类似于您所拥有的,却又更现代,更高效的方法。你可以使用C#7.0的模式匹配switch

foreach (var record in mappedContent)
    switch (record )
    {
        case TypeA typeA:
            tAlist.Add(typeA);
            break;
        ...

尽管您必须列出20个ect,ect,ect,但它会给您平O(n)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

自定义 FirebaseListAdapter 中的错误“无法转换类型的对象”

使用自定义转换器映射对象类型

如何将 JSON 对象转换为自定义 C# 类型对象?

JPA @JoinColumn 自定义对象类型

自定义对象的JavaScript类型

房间如何转换自定义对象

TypeScript 中的自定义对象转换

如果包装对象,将Golang转换为自定义类型会失败

从字符串到某些对象的自定义类型转换

AutoMapper自定义类型转换器ITypeConverter和映射嵌套对象

如何将查询结果中的对象转换为自定义类型

将对象类型强制转换为自定义类时发生System.InvalidCastException

Xamarin表单自定义视图,可绑定的Observable集合<对象>引发“特定类型转换无效”

类型错误:无法将 undefined 或 null 转换为自定义 Hooks 中发生的对象

我的代码未插入自定义对象

循环自定义类型对象离子程序

自定义类型的对象作为字典键

打字稿| 无法循环自定义类型对象

自定义对象的ListView上的不兼容类型错误

合并两个自定义对象类型的ArrayList

自定义对象返回 NSDictionary 作为类型

无法在自定义对象地图类型上传播

DataGridViewComboBoxColumn的项目可以是自定义对象类型吗?

在javascript中检查自定义对象的类型

Powershell自定义对象隐藏属性类型

创建嵌套列表并返回自定义对象类型的列表

从自定义对象类型中删除可为空的属性

实例化泛型类型以支持自定义对象

将自定义javascript对象转换为json