Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从对象类型转换回自定义对象并改进代码_C#_.net Core - Fatal编程技术网

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

C# 从对象类型转换回自定义对象并改进代码,c#,.net-core,C#,.net Core,我有一段代码,其中我在一个对象类型集合中打包了几种类型的对象。它们需要插入到数据库中。 我使用EFCore2.1和一个流行的扩展名EFCore.BulkExtensions 代码如下: List<object> mappedContent = MapContent(elements, mappings);// a million records List<typeA> tAlist= new List<typeA>(); List<typeB>

我有一段代码,其中我在一个对象类型集合中打包了几种类型的对象。它们需要插入到数据库中。 我使用EFCore2.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 );
List mappedContent=MapContent(元素、映射);//一百万张唱片
List tAlist=新列表();
List tBlist=新列表();
List tClist=新列表();
foreach(mappedContent中的var记录)
{
开关(record.GetType().Name)
{
案例“A型”:
t添加((A型)记录);
打破
“B类”案例:
tBlist.Add((B类)记录);
打破
案例“C型”:
tClist.Add((typeC)记录);
打破
违约:
抛出新异常(“未知类型”);
}
}
上下文插入(tAlist);
插入上下文(tBlist);
context.BulkInsert(tClist);
我有20多种不同的对象类型,我想知道是否可以避免代码中的重复。此外,我希望在不影响性能的情况下执行此操作,甚至改进当前的性能,由于我使用的库,这是可以接受的

非常感谢

听起来像是一份适合你的工作

根据指定类型筛选IEnumerable的元素

它的时间复杂度基本上是O(n),每次你调用它

如果您想要一种更高效、更详细、类似于您现有的、更现代、更高效的方法。您可以在
开关中使用C#7.0模式匹配

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

它将为您提供平坦的O(n),尽管您必须创建20个列表ect、ect、ect

是的,性能得到了改进,因为您在字符串类型上使用了开关大小写,但类型扩展方法使用“is”关键字检查每个项目的类型。
foreach (object obj in source) 
{
    if (obj is TResult) yield return (TResult)obj;
}
foreach (var record in mappedContent)
    switch (record )
    {
        case TypeA typeA:
            tAlist.Add(typeA);
            break;
        ...