【发布时间】:2016-10-21 10:31:37
【问题描述】:
我有一个带有大量参数的方法。其中一些是可选的。所以,为了方便使用这个方法,我使用了可选参数功能。
此外,此方法仅针对非空参数构建一个Dictionary<string,string>,其中参数名称作为字典的键,参数的值作为字典的值。
方法如下:
public string CreateParameterDictionary(
string id,
string firstName,
string lastName,
string address,
string postalCode,
string lorem = null,
string ipsum = null,
string dolor = null,
//...
string sit = null,
string amet = null)
{
if (String.IsNullOrWhiteSpace(id) ||
String.IsNullOrWhiteSpace(firstName) ||
String.IsNullOrWhiteSpace(lastName) ||
String.IsNullOrWhiteSpace(address) ||
String.IsNullOrWhiteSpace(postalCode))
{
throw new ArgumentNullException($"nameof((id) nameof(firstName) nameof(lastName) nameof(address) nameof(postalCode)");
}
Dictionary<string,string> parametersDictionary = new Dictionary<string, string>();
parametersDictionary.Add(nameof(((id),((id);
parametersDictionary.Add(nameof(firstName),firstName);
parametersDictionary.Add(nameof(lastName),lastName);
parametersDictionary.Add(nameof(address),address);
parametersDictionary.Add(nameof(postalCode),postalCode);
if (!String.IsNullOrWhiteSpace(lorem)) parametersDictionary.Add(nameof(lorem), lorem);
if (!String.IsNullOrWhiteSpace(ipsum)) parametersDictionary.Add(nameof(ipsum), ipsum);
if (!String.IsNullOrWhiteSpace(dolor)) parametersDictionary.Add(nameof(dolor), dolor);
//...
if (!String.IsNullOrWhiteSpace(sit)) parametersDictionary.Add(nameof(sit), sit);
if (!String.IsNullOrWhiteSpace(amet)) parametersDictionary.Add(nameof(amet), amet);
return parametersDictionary;
}
可以使用命名参数调用:
CreateParameterDictionary(5, "Dexter, "Morgan", "Miami", 12345, dolor: 5);
如您所见,该方法有点冗长。想知道有没有更简洁的写法(不用反思)
谢谢!
编辑
感谢您的回答但是,我的问题并不清楚。只是一个精度:
- 我的真实方法中的参数名称不是param1,param2等,而是更多的业务名称,如id,firstName,lastName,address1 = null。 像这样,当我们使用这种方法时,更容易知道哪个参数是强制性的或不是强制性的。在此之前,我使用了 params string[],但是当我使用它时,我无法获得参数的名称。
希望我的解释现在更清楚了。
【问题讨论】:
-
您可能希望将我给 Radin 的示例合并到我的一个 cmets 中 -
CreateParameterDictionary("a","b","c","d","e",param16:"p");- 很明显可选参数不会“用完”或在声明顺序中指定,并且这就是为什么params解决方案都是错误的,如果这是你的意图的话。 (当然,在您的问题中,您可以进一步充实示例。我需要一些内容以适合评论)
标签: c# optional-parameters nameof