Jak*_*ake 4 c# generics params
假设我有两个功能:
Foo(params INotifyPropertyChanged[] items)
{
//do stuff
}
Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged
{
Foo(items.ToArray());
}
Run Code Online (Sandbox Code Playgroud)
第二个允许我Foo从具有约束的泛型类调用where T : INotifyPropertyChanged,但第二个解析为自身,因此我得到堆栈溢出异常.
params从泛型类调用函数的方法,假设泛型类型的约束使其成为该params类型的可行选项?提前致谢!
你需要传递一个INotifyPropertyChanged[],而不是一个T[].
例如:
Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged
{
Foo(items.Cast<INotifyPropertyChanged>().ToArray());
}
Run Code Online (Sandbox Code Playgroud)
但是,一般情况下,最好IEnumerable从params版本中调用版本,如下所示:
Foo(params INotifyPropertyChanged[] items)
{
Foo((IEnumerable<INotifyPropertyChanged>) items);
}
Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2676 次 |
| 最近记录: |