“AddToLeg”方法似乎很啰嗦,有没有更好的模式或更有效的方法来实现它?我考虑过使用字典,但我希望键保持整数。我对 linq/generics 还很陌生,所以我可能遗漏了一些更明显的东西。当我查看文档时,实际上没有任何示例符合我的情况。
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication1
{
public class Program
{
public static void Main()
{
var model = new TrainspotterItenaryViewModel();
var manchester = new Station() { Name = "Manchester", ExpectedTime = "13:30" };
var leeds = new Station() { Name = "Leeds", ExpectedTime = "15:00" };
var york = new Station() { Name = "York", ExpectedTime = "15:30" };
var london = new Station() { Name = "London", ExpectedTime = "21:00" };
model.AddToLeg(1, manchester);
model.AddToLeg(1, leeds);
model.AddToLeg(2, leeds);
model.AddToLeg(2, london);
model.AddToLeg(1, york); //another destination added to leg 1
//any number of legs can be added...
model.AddToLeg(3, manchester);
//show results contents
for(var i=1; i <= model.Legs.Count; i++)
{
var displayLeg = model.Legs.Single(x=>x.LegNumber==i);
foreach(var station in displayLeg.Stations){
string output = $"leg: {displayLeg.LegNumber} station: {station.Name}, expected:{station.ExpectedTime}";
Console.WriteLine(output);
}
}
}
}
public class TrainspotterItenaryViewModel
{
public List<Leg> Legs { get; set; }
public void AddToLeg(int legNumber, Station station)
{
if (Legs == null)
{
Legs = new List<Leg>();
}
var legCount = Legs.Count(x => x.LegNumber == legNumber);
if (legCount == 0)
{
var leg = new Leg
{
LegNumber = legNumber,
Stations = new List<Station> {station}
};
Legs.Add(leg);
Console.WriteLine($"Leg {leg.LegNumber} Not Found- Added new leg and {station.Name}");
}
else
{
foreach (var leg in Legs)
{
if (leg.LegNumber == legNumber)
{
leg.Stations.Add(station);
Console.WriteLine($"Leg {legNumber} Found- adding {station.Name}");
}
}
}
}
}
public class Leg
{
public int LegNumber { get; set; }
public List<Station> Stations { get; set; }
}
public class Station
{
public string Name { get; set; }
public string ExpectedTime { get; set; }
}
}
最佳答案
为此任务使用字典:
public class TrainspotterItenaryViewModel
{
private Dictionary<int, Leg> _legNumberToLegIndex { get; set; }
public IEnumerable<Leg> Legs => _legNumberToLegIndex?.Values
public void AddToLeg(int legNumber, Station station)
{
if (_legNumberToLegIndex == null)
{
_legNumberToLegIndex = new Dictionary<int, Leg>();
}
Leg leg;
if (!_legNumberToLegIndex.TryGetValue(legNumber, out leg))
{
leg = new Leg
{
LegNumber = legNumber,
Stations = new List<Station>()
};
_legNumberToLegIndex.Add(legNumber, leg);
}
leg.Stations.Add(station);
}
}
关于c# - 为整数键控模型集合寻找优雅/高效的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42131859/