使用泛型将具有相同属性的类A和B的泛型列表转换为类C的列表

时间:2019-07-12 00:46:33

标签: c# list generics types

我有3个课程,DOb,Patient和LookUp

public class Dog
    {  public int Id { get; set; }
        public DateTime DOB { get; set; }
        public string FirstName { get; set; }
        public string Display { get; set; }
        public int qqQMS { get; set; }
        public string Description { get; set; }
    }

public class Patient
    {
       public int Id { get; set; }
        public Guid Patid { get; set; }
        public string FirstName { get; set; }
        public string Display { get; set; }
        public string Description { get; set; }
    }
 public class LookUp : ILookUp
        public int Id { get; set; }
        public string Display { get; set; }
        public string Description { get; set; }
    }

我试图轻松地将列表或列表转换为我之前问过的问题的列表,但从来没有想过,如果不使用Dynamic,我宁愿没有Dynamics的情况也更顺畅

我尝试过

 List<LookUp> Look = doggy.Cast<LookUp>().ToList();

  List<LookUp> patLook = pat.Cast<LookUp>().ToList();

也尝试过此操作,但我对此不满意

public static IList<LookUp> ToLookUp<T>( IEnumerable<T> source)  
        {
            List<LookUp> list = (from prop in source
                                 select new LookUp
                                 {
                                     Display = prop.Display ?? "",
                                     Description = prop.Description ?? "",
                                     Id = prop.Id
                                 }).ToList();
            return list;
        }

扩展方法可以工作

1 个答案:

答案 0 :(得分:0)

您将需要在 classes 上实现 interface ,此时不需要具体的Lookup class < / p>

public class Dog : ILookUp { ... }

public class Patient : ILookUp { ... }

这样,您可以投射到界面并使用它

var listOfDogs = new List<dog>();

var LookupList = listOfDogs.Cast<ILookup>();

  

我很乐意,但是Dob ad Patient是在其他地方创建的,而我却无法   修改它们

那么,没有比这更简单的方法了,您真的不能在没有反思的情况下做出通用的解决方案,您必须在执行过程中 project Lookup或进行表达式每种类型