次の2つのオーバーロードされた関数を検討してください。最初のものは、単一の値をリストにラップし、複数の値をとるものに渡します。オーバーロードのない単一またはIEnumerableパラメータを取る
オーバーロードされた単一の機能が必要ないように感じます。単一または列挙型を扱うことができる関数が1つしかないため、あまりにも簡単ではありませんか?
public static void Insert<T>(EntityType entityType, long entityId, string shortName, T value, string owner = null, OptionSearch optionSearch = OptionSearch.Name)
{
Insert(entityType, entityId, shortName, new List<T> {value}, owner, optionSearch);
}
public static void Insert<T>(EntityType entityType, long entityId, string shortName, IEnumerable<T> values, string owner = null, OptionSearch optionSearch = OptionSearch.Name)
{
// Do all the stuff and things using a list of values.
}
通常、それはちょうどそれが不要思われてしまう私は、過負荷を気にしないだろうが、すべてのこれらのパラメータで(そしてそれらを一つの入力オブジェクトを作成するオプションはありません)。
はPS:Passing a single item as IEnumerable<T>関連だけではないので、多くのオーバーロードを行う方法を説明していることかコメントに提案以外の過負荷を回避するための方法はありません
'params'を使用できますか? – CompuChip
私はこれを行う方法が現在あるとは思わない。パラメータを並べ替えると配列パラメータを得るためにparamsを使うことができますが、それはIEnumerableではなく配列です。あなたがやっていることに応じて、それはうまくいくかもしれません。そうでなければ、C#に 'params IEnumerable'という話がありましたが、まだそれを作ったという証拠は見つかりませんでした。 – Chris
最後のパラメータになるように値を移動すると、' params T [] values'、これは両方を受け入れます。キャッチは、議論の順序を変えることで、それはそれに対する議論になる可能性があるということです。 – Icepickle