通用的限制我有很多类型IWorkingPattern
接口...没有申请
public interface IWorkingPattern
{
TimeSpan Start { get; }
TimeSpan End { get; }
}
我希望能够在词典中这些转换成平板可枚举的Timeslot
...
public class Timeslot
{
public Timeslot(DateTime start, DateTime end)
{
}
}
为了实现这一点,我写了下面的通用的辅助方法......
public IEnumerable<Timeslot> ToTimeslots<T>(IEnumerable<KeyValuePair<DateTime, IEnumerable<T>>> datePatterns)
where T : IWorkingPattern
{
Collection<Timeslot> timeslots = new Collection<Timeslot>();
foreach (KeyValuePair<DateTime, IEnumerable<T>> datePattern in datePatterns)
foreach (IEnumerable<T> pattern in datePattern.Value)
timeslots.Add(new Timeslot(datePattern.Key + pattern.Start, datePattern.Key + pattern.End));
return timeslots;
}
然而,试图完成时,我得到2个错误的Start
和End
性能各一句话:
“System.Collections.Generic.IEnumerable”不包含“XXX”,没有扩展方法“XXX的定义“接受一个类型的第一个参数‘System.Collections.Generic.IEnumerable’可以找到(是否缺少using指令或程序集引用?)
我可以在第二投射每个pattern
得到这个工作foreach循环(如:((IWorkingPattern)pattern).Start
。不过,我相信我不应该因为接口约束而这样做。
我在做什么错?
如果你有'其中T:IWorkingPattern'为什么不利用它'IWorkingPattern'代替'在T'第一名? – TheLethalCoder
'pattern'是'IEnumerable',但你试图从'T'中选择'Start'和'End'。编译器告诉你'IEnumerable '与'T'不一样。 –
你也试图在'IEnumerable'上实现该方法,而不是在其内部的特定对象上。或者@Brian说的是什么 – TheLethalCoder