【问题标题】:Dynamically pass entries to Method requiring params动态地将条目传递给需要参数的方法
【发布时间】:2011-10-18 08:55:52
【问题描述】:

我目前有以下需要参数的方法 - 我无法更改此方法定义:

public static DoStuff(params Parameter[] p){ /* ... */ }

我不知道在运行时我会有多少参数,所以我想传递一个数组或一个列表 - 我考虑过使用这样的迭代器:

List<Parameter> pList = new List<Parameter>();
pList.Add(new Parameter("@a", "aaaa!");
pList.Add(new Parameter("@b", "bbbb!");
pList.Add(new Parameter("@c", "cccc!");
DoStuff(Iterate(pList));

这里是迭代方法:

public static IEnumerator<Parameter> Iterate(List<Parameter> pList)
    {
        foreach (Parameter p in pList)
            yield return p;
    }

不幸的是,它不起作用,它一直告诉我它不能将(生成的类型)转换为 CommandParameter。

任何帮助(或不同的方法)将不胜感激!

编辑:看来,为了使我的问题易于理解,我试图简化我的解决方案。

除了这个数组,我还想像这样传递“普通”参数:

DoStuff(Iterate(pList), new Parameter("@d", "dddd!"));

我这样做只是出于好奇,想看看它是否有效——但这并不能简单地将我的 List 转换为 Array 并附加下一个参数。

谢谢,

丹尼斯

【问题讨论】:

    标签: c# iterator params


    【解决方案1】:

    你可以这样做:

    DoStuff(pList.Concat(new[]{ new Parameter("@d", "dddd!"), new Parameter("@e", "eeee!"}).ToArray());
    

    【讨论】:

      【解决方案2】:

      据我所知,params 关键字需要一个数组作为参数类型,那么您可以使用DoStuff(pList.ToArray());

      你指定的定义应该是

      public static DoStuff(params Parameter[] p){ /* ... */ }
      

      还是我错过了一些新功能?

      【讨论】:

      • 是的,你是对的,它是 Parameter[] - 我改变了我原来的解决方案,使它更容易一点,但忘了添加它。改变了它。简单地传递一个数组是行不通的。
      • 应该可以,尝试创建自己的方法Test(params myType[] p) 并调用Test(new List&lt;myType&gt;() { ... }.ToArray()) - 错误消息是编译器错误还是运行时错误?
      【解决方案3】:

      出于兴趣,为什么需要使用Iterate/yield方法?

      这是否行不通的原因?

      static void Main(string[] args)
      {
          List<Parameter> pList = new List<Parameter>();
          pList.Add(new Parameter("@a", "aaaa!"));
          pList.Add(new Parameter("@b", "bbbb!"));
          pList.Add(new Parameter("@c", "cccc!"));
          DoStuff(pList.ToArray());
      }
      
      static void DoStuff(params Parameter[] parameters){ 
      
          foreach(var p in parameters)
          {
              //do something.
          }
      
      }
      

      【讨论】:

      • DoStuff(..) 有两个重载吗?一个用于参数数组,一个用于参数数组加单个参数?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多