我有一个返回类A列表的方法。但是我存储了具有相同属性的另一个类的List,需要返回此类。
代码:
public List<Menu> GetAllMenus()
{
Menu _menu = null;
List<Menu> MenuList = new List<Menu>();
List<Menu2> CacheMenuList=new List<Menu2>();
//Caching
string CacheKey = "GetAllMenus";
ObjectCache cache = MemoryCache.Default;
if (cache.Contains(CacheKey))
CacheMenuList= (List<Menu2>)cache.Get(CacheKey);
return CacheMenuList
}
Menu和Menu2类型都具有相同的属性。 由于要求,我需要将其作为Menu2类型的另一个列表返回。 在上面的代码中,由于它是Menu2类型,因此无法返回CacheMenuList。有没有其他方法我可以做到这一点。我收到以下错误。
无法隐式转换类型'System.Collections.Generic.List&lt; DailyThanthi.Contracts.Menu2&gt;'到'System.Collections.Generic.List&lt; DailyThanthi.Contracts.Menu&gt;' DailyThanthi.Repository D:\ Prjct \ DTNewsRevamp \ DailyThanthi.Common \ DailyThanthi.Repository \ MenuRepository.cs 85 Active
答案 0 :(得分:3)
我建议使用优秀的库Automapper,如果属性完全相同,这应该特别容易。这是一个最小的工作示例:
Mapper.Initialize(cfg => cfg.CreateMap<Menu, Menu2>());
List<Destination> cacheMenuList = Mapper.Map<List<Menu>, List<Menu2>>(sources);
如果属性不相互映射1:1,则必须在初始化映射器时调整配置。
答案 1 :(得分:1)
以下是一种方法:
t.printStackTrace();
}
您基本上为CacheMenuList= ((List<Menu>)cache.Get(CacheKey)).Select(
x => new Menu2 () {
Property1 = x.Property1,
Property2 = x.Property2,
Property3 = x.Property3,
Property4 = x.Property4
}
).ToList();
中的每个Menu2
对象创建了一个Menu
对象。您将每个List<Menu>
属性分配给Menu
中的相应属性。
答案 2 :(得分:1)
如何创建界面并返回其中的列表?
public interface IMenu { ... }
public class Menu : IMenu { ... }
public class Menu2 : IMenu { ... }
public List<IMenu> GetAllMenus()
{
List<IMenu> result = new List<Menu>();
//Caching
string CacheKey = "GetAllMenus";
ObjectCache cache = MemoryCache.Default;
if (cache.Contains(CacheKey))
result= (List<IMenu>)cache.Get(CacheKey);
return result;
}
或类似的东西。