Я буду придираться к термину «коллапс», поскольку кажется, что вы действительно хотите «расшириться». И я не уверен, что вы подразумеваете под решениями, «имеющими непосредственное отношение к ключевому слову params» и тем, что «вас не интересуют обходные пути». В конце концов, вам нужно либо передать несколько строк, которые компилятор волшебным образом упакует в массив, либо непосредственно в массив строк. При этом мое решение (без изменения интерфейса) будет выглядеть примерно так:
return AppendFolders(new string[] { basefolder, version, callingModule }.Concat(extraFolders).ToArray());
Редактировать:
Хотя вы не можете добавить оператор с помощью методов расширения, вы можете сделать:
return AppendFolders(new string[] { baseFolder, callingModuleName, version }.Concat(extraFolders));
public static T[] Concat<T>(this T[] a, T[] b) {
return ((IEnumerable<T>)a).Concat(b).ToArray();
}
Но, если мы пойдем так далеко - можно просто расширить список , чтобы элегантно справиться с этим:
return AppendFolders(new Params<string>() { baseFolder, callingModuleName, version, extraFolders });
class Params<T> : List<T> {
public void Add(IEnumerable<T> collection) {
base.AddRange(collection);
}
public static implicit operator T[](Params<T> a) {
return a.ToArray();
}
}