C# 如何列出函数c的所有变量#
我有一个有很多参数的函数 怎么能这样打印所有参数Kay,ValueC# 如何列出函数c的所有变量#,c#,C#,我有一个有很多参数的函数 怎么能这样打印所有参数Kay,Value public string GetCompatibility(int MediaId, int ProductsTypId, string id, string PreviousURL, HttpRequestBase Request, int? Width, int? Height, int? CampaignID) { foreach (param in.GetEnvironmentVariables())
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);
}
很抱歉,我没有很好地解释这个问题一个方法上有这么多参数表明您的方法做了太多事情。你应该考虑把它重构成更小的逻辑块。 无论如何,如果您认为您的方法已经尽可能小,您应该将所有参数放入一个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);
}
但是,如果您使用这种方法,您将使用参数名称。此外,您只需隐藏方法的复杂性,这是一个糟糕的设计,因此您应该选择该机会作为最后手段。您可以使用
字典来安排参数
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);
//...
这么多的争论主要是设计不好的迹象。你的方法真的只做一件事吗?您应该考虑将参数拆分为属于一起的对象,并将代码分成几个子方法。不管怎样,你可以使用<代码> PARAMS < /Cord>关键字:<代码>公共字符串GoeCopy[PARAM[Obj][ARG] 。这完全是不可能的。也许考虑将你的参数集更改为传递给方法的类的属性。我不够专业,但我问它是否是可能的。我看不出这段代码闻起来比原来的好多少。如果他想迭代该方法的参数,他可以复制并粘贴。如果他经常更改参数列表,以致于这是不切实际的,那么他将遇到比如何枚举参数更大的问题。如果他想将这些参数迭代到十几个不同的方法中,那么定义十几个参数类就太简单了。显然,这是解决他的问题的办法。或者是他认为自己存在的问题。@EdPlunkett你是对的,很明显,OP的主要问题是一个糟糕的设计。在这种情况下,你是对的,这个答案不能解决这个问题。我甚至不应该告诉你,params
存在,他会在任何地方使用它,并发布问题,问为什么它说他的int是字符串或其他东西。@EdPlunkett你是对的,我为此添加了一条评论。在我看来,更糟糕的是,你的合同现在已经不清楚了。@L-Four,这不仅仅是你的意见。
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);
//...