如何列出函数c#的所有变量

时间:2016-10-10 14:40:28

标签: c#

我有一个包含很多参数的函数 怎么能这样打印所有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);
}

对不起,我没有解释好这个问题

2 个答案:

答案 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);
//...