gpt4 book ai didi

c# - 使用 IEnumerable 重载参数函数

转载 作者:太空狗 更新时间:2023-10-30 00:21:59 25 4
gpt4 key购买 nike

假设我有两个函数:

Foo(params INotifyPropertyChanged[] items)
{
//do stuff
}

Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged
{
Foo(items.ToArray());
}

第二个允许我从具有约束 where T : INotifyPropertyChanged 的泛型类调用 Foo,但是第二个解析为自身所以我得到一个堆栈溢出异常.

  1. 是否可以指定在出现歧义时调用哪个重载?
  2. 假设泛型类型的约束使其成为 params 类型的可行选项,是否还有另一种从泛型类调用 params 函数的方法?

提前致谢!

最佳答案

您需要传递 INotifyPropertyChanged[],而不是 T[]
例如:

Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged
{
Foo(items.Cast<INotifyPropertyChanged>().ToArray());
}

但是,一般来说,最好从 params 版本调用 IEnumerable 版本,如下所示:

Foo(params INotifyPropertyChanged[] items)
{
Foo((IEnumerable<INotifyPropertyChanged>) items);
}

Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged
{
//do stuff
}

关于c# - 使用 IEnumerable 重载参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3072827/

25 4 0