假设我有两个功能:
Foo(params INotifyPropertyChanged[] items)
{
//do stuff
}
Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged
{
Foo(items.ToArray());
}
第二个允许我从具有约束Foo
的泛型类中调用where T : INotifyPropertyChanged
,但第二个解析为自身,因此我得到堆栈溢出异常。
params
函数的方法,假设泛型类型的约束使其成为params
类型的可行选项?提前致谢!
答案 0 :(得分:7)
您需要传递INotifyPropertyChanged[]
,而不是T[]
例如:
Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged
{
Foo(items.Cast<INotifyPropertyChanged>().ToArray());
}
但是,一般情况下,最好从IEnumerable
版本调用params
版本,如下所示:
Foo(params INotifyPropertyChanged[] items)
{
Foo((IEnumerable<INotifyPropertyChanged>) items);
}
Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged
{
//do stuff
}
答案 1 :(得分:3)
您可以尝试投射输入。
Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged
{
Foo(items.Cast<INotifyPropertyChanged>().ToArray());
}
如果这不起作用,我不知道,你可能运气不好。