這裏有一個選擇,與你要重新聲明缺省值常數缺點:通過聲明的字符串作爲const
小號
CreateTaskGroup(
args[0],
args.ElementAtOrDefault(1) ?? "en-us",
args.ElementAtOrDefault(2) ?? "MyProject",
args.ElementAtOrDefault(3) ?? "DefaultTeam",
args.ElementAtOrDefault(4) ?? "abc");
您可以減少這個問題,如:
public const string MarketDefault = "en-us";
public static int CreateTaskGroup(string TaskGroupName,
string Market = MarketDefault, ...)
static void Main(string[] args)
{
CreateTaskGroup(
args[0],
args.ElementAtOrDefault(1) ?? MarketDefault,
...);
}
但是,編譯器不能保證它,也不明顯,MarketDefault
事實上仍然(代碼可以在未來重構),默認爲Market
。
編輯:這是一個替代的解決方案,使用反射:
var argsForMethod = new List<string>(args);
var m = typeof(Program).GetMethod("CreateTaskGroup");
foreach (var p in m.GetParameters().Skip(args.Length))
if (p.Attributes.HasFlag(ParameterAttributes.HasDefault))
argsForMethod.Add((string)p.DefaultValue);
else
throw new NotImplementedException();
var result = (int)m.Invoke(null, argsForMethod.ToArray());
這可能是一個有點難以閱讀,並不會太快,但它確實你問什麼,而不是訴諸重複的代碼或者對參數的默認值有任何不確定性。您可能想要爲太少或太多的參數添加一些錯誤處理。我喜歡這個解決方案。
見這個類似的問題:http://stackoverflow.com/questions/1996426/pass-multiple-optional-parameters-to-ac-sharp-function – Wug
的參數總是以相同的順序? – blitzen
@Wug,我不認爲這個問題有足夠的相似性,對OP有幫助。(除非OP想要使他的方法不易讀) –