我试图为方法CheckResult编写一个通用方法,以便它可以跨不同的类使用。例如,如果我有一个泛型方法,那么唯一要更改的就是类名。这里是ClassA,另一种方法可以通过classB。
public bool CheckResult(Guid Id, List<ClassA> model,List<ClassA> existingEntities)
{
var ids = existingEntities?.Select(x => x.Id).Except(model.Select(x => x.Id)).ToList();
var check = existingEntities?.Where(o => ids.Any(c => c == o.Id && o.EffectiveTo >= DateTime.Today)).ToList();
check?.AddRange(model);
var dateModel = check.Select(x => new TimeInterval(x.EffectiveFrom, x.EffectiveTo)).ToList();
return true;
}public static bool OpTest<T>(T model, T existingEntities, Guid t) where T : class
{
// var existingEntities = smRepository.GetStationMapping(t, StatusEnum.ALL); //smRepository.GetStationMapping(t, StatusEnum.ALL);
var ids = existingEntities?.Select(x => x.Id).Except(model.Select(x => x.Id)).ToList();
var check = existingEntities?.Where(o => ids.Any(c => c == o.Id && o.EffectiveTo >= DateTime.Today)).ToList();
check?.AddRange(model);
var dateModel = check.Select(x => new TimeInterval(x.EffectiveFrom, x.EffectiveTo)).ToList();
return true;
}这是我第一次写泛型,任何帮助都是感谢的。代码出错了吗?
发布于 2016-09-07 20:37:27
我在这里看到了一个问题。您正在尝试访问T类型的对象上的成员,但是T是一个未知类型;它不能保证有您要访问的成员。C#不喜欢那样。
我在这里看到两种选择:
稳健期权
使用适当的成员创建一个接口IMyInterface。然后写这个:
public static bool OpTest(IEnumerable<IMyInterface> model, IEnumerable<IMyInterface> existingEntities, Guid t)
{
List<SomeType> ids = existingEntities?.Select(x => x.Id).Except(model.Select(x => x.Id)).ToList();
List<IMyInterface> check = existingEntities?.Where(o => ids.Any(c => c == o.Id && o.EffectiveTo >= DateTime.Today)).ToList();
check?.AddRange(model);
List<TimeInterval> dateModel = check.Select(x => new TimeInterval(x.EffectiveFrom, x.EffectiveTo)).ToList();
return true;
}快速而肮脏的选择
使用dynamic代替。请注意,如果使用此方法,如果发生任何错误,代码将在运行时中断。如果你不想让它那样破碎,那就不要使用这个选项。
public static bool OpTest(IEnumerable<dynamic> model, IEnumerable<dynamic> existingEntities, Guid t)
{
List<dynamic> ids = existingEntities?.Select(x => x.Id).Except(model.Select(x => x.Id)).ToList();
List<dynamic> check = existingEntities?.Where(o => ids.Any(c => c == o.Id && o.EffectiveTo >= DateTime.Today)).ToList();
check?.AddRange(model);
List<dynamic> dateModel = check.Select(x => new TimeInterval(x.EffectiveFrom, x.EffectiveTo)).ToList();
return true;
}发布于 2016-09-07 20:25:52
public static bool OpTest<T>(List<T> model, List<T> existingEntities, Guid t) where T : class
{
// var existingEntities = smRepository.GetStationMapping(t, StatusEnum.ALL); //smRepository.GetStationMapping(t, StatusEnum.ALL);
var ids = existingEntities?.Select(x => x.Id).Except(model.Select(x => x.Id)).ToList();
var check = existingEntities?.Where(o => ids.Any(c => c == o.Id && o.EffectiveTo >= DateTime.Today)).ToList();
check?.AddRange(model);
var dateModel = check.Select(x => new TimeInterval(x.EffectiveFrom, x.EffectiveTo)).ToList();
return true;
}保持您的项目列表,否则您不能使用linq在它。
https://stackoverflow.com/questions/39378387
复制相似问题