Я ожидаю, что стрелки покажут текущее состояние (подчеркивающий, когда список в настоящее время возрастет). Что Windows Explorer делает в Представлении Деталей.
The current version of C# (3) supports a notation without explicit type, i.e.
Foo(new [] { o1, o2, o3 })
to create an array. There’s also Linq’s Enumerable.Range
to create a continuous range of numbers. Everything else has to be implemented. In the spirit of Java:
public static IEnumerable<T> AsList<T>(params T[] values) {
return values;
}
to be called like this:
Foo(Enumerable.AsList(o1, o2, o3));
Иногда я использовал метод с аргументом params.
Foo(params T[] ts)
И если я полностью настроен на IEnumerable, у меня просто делегат этого метода тому, кому нужен IEnumerable.
Foo(params T[] ts) { Foo(ts.AsEnumerable()); }
Вы должны вызвать AsEnumerable, иначе вы собираетесь выполнять рекурсию.
Assuming Foo expects an IEnumerable
T o1, o2, o3;
Foo(new []{o1, o2, o3});
Creating an array and passing that is probably the simplest/most elegant way to accomplish this in the current version of C#. You can take advantage of implicit array typing (i.e. new[] { ... }
, but that's as far as it goes.
I suspect you're really looking for the C# equivalent of this F# syntax:
let foo = seq [ o1; o2; o3 ]
which generates an IEnumerable
that will iterate over the specified elements. ('Seq' is actually the F# alias for 'IEnumerable`, though F# has built-in support for them.)
Unfortunately, since this is a largely functional notion, there is no C# equivalent - though who knows when it will be added, as C# becomes more and more functional.
Если у вас есть метод, который принимает массив в качестве последнего параметра, имеет смысл отметить этот параметр params
. Это позволяет вызывать метод следующим образом:
Foo(o1, o2, o3);
Я нахожу это особенно полезным при написании модульного теста для Foo ()
, потому что часто в модульном тесте мои параметры разделяются таким образом, а не в array.
Я не рекомендую делать это, если есть перегрузка Foo ()
, которая не принимает массив в этой позиции, потому что это может быстро запутать.
Я действительно желаю этого язык C # разрешает params
для IList
:
void Foo(params IList<T> ts) { ... }