两个集合都有ExternalIds。如果参数类型为1或2,我将如何更改foreach使用的集合。我是否必须执行两个单独的循环或者我可以以某种方式使用集合T?
public ActionResult Details(string id, int type)
{
IEnumerable<Album> collection1 = ASR.Albums;
IEnumerable<Track> collection2 = TSR.Tracks;
foreach (var item in collection1)
{
var result = item.ExternalIds.SingleOrDefault(x => x.Id == id);
if (result != null)
{
return View(item);
}
}
return View();
}
答案 0 :(得分:2)
创建一个与ExternalIds的接口作为成员,让Album和Track从该接口派生。
public interface IExternalIds
{
public IEnumerable<SomeType> ExternalIds { get; }
}
public class Album: IExternalIds
{
...
}
public class Track: IExternalIds
{
...
}
public ActionResult Details(string id, int type)
{
IEnumerable<Album> collection1 = ASR.Albums;
IEnumerable<Track> collection2 = TSR.Tracks;
var collectionToUse = ((type == 1) ? collection1 : collection2)
as IEnumerable<IExternalIds>;
foreach (var item in collectionToUse)
{
var result = item.ExternalIds.SingleOrDefault(x => x.Id == id);
if (result != null)
{
return View(item);
}
}
return View();
}
答案 1 :(得分:0)
我认为你希望他们拥有基类/接口。让我举例说明:
public interface IEntity
{
public List<YourListType> ExternalIds { get; set; }
}
然后在两个类中实现IEntity接口:
public class Album : IEntity
{
public List<YourListType> ExternalIds { get; set; }
}
完成此操作后,您可以将代码看起来像这样:
public ActionResult Details(string id, int type)
{
IEnumerable<IEntity> collection1 = ASR.Albums;
IEnumerable<IEntity> collection2 = TSR.Tracks;
var collectionToUse = (type == 1) ? collection1 : collection2;
foreach (var item in collectionToUse)
{
var result = item.ExternalIds.SingleOrDefault(x => x.Id == id);
if (result != null)
{
return View(item);
}
}
return View();
}
因此,通过实现将在两个类中实现的接口,您可以使用在接口中声明的公共属性。
我希望这能回答你的问题。
答案 2 :(得分:0)
专辑和曲目是否有共同的基本类型?如果是这样,你可以这样做:
IEnumerable<BaseType> collection = type == 1 ? ASR.Albums : TSR.Tracks;
foreach (var item in collection)
{
...
}
如果您没有公共基本类型,请创建一个界面,在foreach中添加您需要的公共属性,将其应用于Album
和Track
然后执行此类操作:
IEnumerable<IMusicInfo> collection = type == 1 ? ASR.Albums : TSR.Tracks;
foreach (var item in collection)
{
...
}
请记住要很好地命名您的界面,并仅添加在该界面中有意义的属性以实现良好的编码实践