有没有更好的方法来编写接受多种类型的C#函数?

luc*_*iet -3 c# generic-collections function-declaration

一些上下文:我想编写一个类,其中向集合添加内容的主要方法是通过名为Add(或类似的东西)的方法(或方法).所以最好的签名是params object [].在内部,这个函数必须切换/ if-else它可以接受的所有类型.所以,最初它可以接受这个object []数组,但我可能希望看到它也接受object [] []和object [] [] []等,然后方法/函数可以在内部展平,所以在调用此函数之前,用户不需要这样做.

所以...

是否有可能编写一个函数,可以为一种对象接受各种级别的列表类型? 作为一个方面的问题,设计一个接口类,这是更好地接受时object[]IEnumerable<object>params object[](编辑:从问题中解脱出来,因​​为已经有足够的事情了.)

举例来说,我在想,可同时接收/所有的功能object[],IEumerable<object>以及可能进一步嵌套,如:IEnumerable<IEnumerable<object>>,object[][](而上,上和,等等).

这可能吗?

Eri*_*ert 16

您会注意到List<T>类本身有方法Add,它采用T和AddRange,它采用T序列.出于两个原因,我们不会尝试重载Add来做两者.首先,因为添加一个东西并添加一堆东西在逻辑上是不同的,其次,因为它极大地使重载分辨率复杂化.

如果你想要一个采用T序列的方法,那么编写一个采用T序列的方法.如果调用者有一系列序列,则让它们变平; 不要试图代表他们如何有效地猜测.

哪个更好:接受object[]还是IEnumerable<object>params object[]

我们怎么知道呢?我们不是那个叫方法的人.您应该询问的人是将要编写代码来调用您的方法的人.