我有一个包含很多参数的函数 怎么能这样打印所有parmers凯,价值
public string GetCompatibility(int MediaId, int ProductsTypId, string id, string PreviousURL, HttpRequestBase Request, int? Width, int? Height, int? CampaignID)
{
foreach (param in.GetEnvironmentVariables())
Console.WriteLine(" {0} = {1}", param.Key, param.Value);
}
对不起,我没有解释好这个问题
答案 0 :(得分:0)
大多数方法上有这么多参数表明你的方法做了太多事情。你应该考虑将它重构为更小的逻辑块。
无论如何,如果你认为你的方法已经 尽可能小,你应该把所有参数都放到一个DTO中:
public class ParamValues
{
public int MediaId {get; set; }
// ...
public ParamValues(int MediaId, int ProductsTypId, string id, string PreviousURL, HttpRequestBase Request, int? Width, int? Height, int? CampaignID)
{
this.MediaId = MediaId;
// ...
}
}
现在在你的主叫代码中:
GetCompatibility(new ParamValues(...));
现在,您可以轻松地记录所有参数,可以使用ParamValues
- 类(不好主意)的反射,也可以直接在ParamValues
的构造函数中记录。
另一种方法是使用params
- 关键字:
public string GetCompatibility(params object[] args)
{
foreach(var arg in args) Console.WriteLine(arg);
}
但是,如果使用此方法,则使用参数名称。此外,你只是隐藏了方法的复杂性,这是一个糟糕的设计,所以你应该选择这个机会作为最后的手段。
答案 1 :(得分:0)
您可以使用Dictionary
来安排您的参数。
public static void GetCompatibility(Dictionary<string, object> paramters)
{
foreach (var pair in paramters)
Console.WriteLine(" {0} = {1}", pair.Key, pair.Value);
}
//...
Dictionary<string, object> paramters = new Dictionary<string, object>
{
{"MediaId", 1},
{"ProductsTypId", 1},
{"PreviousURL", "http://xxx"},
{"Request", null},
{"Width", 123},
{"Height", 123},
{"CampaignID", 123},
};
GetCompatibility(paramters);
//...
或者,如果修改了参数,请使用结构来执行此操作。
public struct CompatibilityParam
{
public int MediaId;
public int ProductsTypId;
public string id;
public string PreviousURL;
public HttpRequestBase Request;
public int? Width;
public int? Height;
public int? CampaignID;
}
public static void GetCompatibility(CompatibilityParam paramters)
{
Console.WriteLine(" MediaId = {0}", paramters.MediaId);
Console.WriteLine(" ProductsTypId= {0}", paramters.ProductsTypId);
Console.WriteLine(" PreviousURL= {0}", paramters.PreviousURL);
Console.WriteLine(" Request= {0}", paramters.Request);
Console.WriteLine(" Width= {0}", paramters.Width);
Console.WriteLine(" Height= {0}", paramters.Height);
Console.WriteLine(" CampaignID= {0}", paramters.CampaignID);
}
//...
CompatibilityParam paramters = new CompatibilityParam
{
MediaId = 1,
ProductsTypId = 1,
PreviousURL = "http://xxx",
Request = null,
Width = 123,
Height = 123,
};
GetCompatibility(paramters);
//...