从带参数的方法调用带参数的方法

发布于 2024-12-09 04:21:34 字数 347 浏览 0 评论 0原文

我想做下一步:

void SomeMethod ()
{
  ParamMethod1 (1,2,3);
}

void ParamMethod1 (params object[] arg)
{
   ParamMethod2 (0, arg); //How to call ParamMethod2 in order to it works 
   //as I want
}

void ParamMethod2 (params object[] arg)
{
  //I want 'arg' contains 0,1,2,3 instead of 0, System.object[]
}

感谢您的帮助。

I want to do the next:

void SomeMethod ()
{
  ParamMethod1 (1,2,3);
}

void ParamMethod1 (params object[] arg)
{
   ParamMethod2 (0, arg); //How to call ParamMethod2 in order to it works 
   //as I want
}

void ParamMethod2 (params object[] arg)
{
  //I want 'arg' contains 0,1,2,3 instead of 0, System.object[]
}

Thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

在你怀里撒娇 2024-12-16 04:21:34

您可以使用 LINQ 来完成此操作,但您仍然需要 ToArray()

ParamMethod2(new object [] { 0 }.Concat(arg).ToArray());

编辑添加:

根据有关性能的评论,我在建议的方法之间进行了一些非常基本的性能比较。

对于 100 万次调用

80ms -- Direct call: ParamMethod2(0,1,2,3);
280ms -- Using CopyTo
400ms -- Using LINQ
590ms -- Using AddRange

当然,如果您将 object 更改为 int 以及其他一些东西,您将进一步提高性能。就我个人而言,我会使用 LINQ,因为它对于 99% 的情况来说足够快,而在其他情况下,我一开始就不会使用参数。

You can do it with LINQ but you need still need ToArray()

ParamMethod2(new object [] { 0 }.Concat(arg).ToArray());

Edited to Add:

Based on the comment regarding performance I did some very basic performance comparisons between the suggested methods.

For 1 million calls

80ms -- Direct call: ParamMethod2(0,1,2,3);
280ms -- Using CopyTo
400ms -- Using LINQ
590ms -- Using AddRange

Of course if you changed object to int and a few other things you will improve performance further. Personally I'd use LINQ because it is fast enough for 99% of cases and in the other case I wouldn't use params in the first place.

千笙结 2024-12-16 04:21:34

一种方法虽然不一定理想,但可以简单地是:

void ParamMethod1 (params object[] arg)
{
    var args = new List<object>();
    args.Add(0);
    if (arg != null)
    {
        args.AddRange(arg);
    }        
    ParamMethod2(args.ToArray());
}

也就是说,无论如何完成,我们都需要将 0arg 的内容组合成一个单一集合 - 毫无疑问会有一种更有效的方法,甚至可能是一种更简单的方法,我今天早上因为缺乏咖啡而看不到这种方法,但是可以这么说,这可以解决问题。

One way, though not necessarily ideal, could simply be:

void ParamMethod1 (params object[] arg)
{
    var args = new List<object>();
    args.Add(0);
    if (arg != null)
    {
        args.AddRange(arg);
    }        
    ParamMethod2(args.ToArray());
}

That is to say, regardless of how this is done, we need to combine 0 and the contents of arg into a single collection - there will doubtless be a more efficient way, and perhaps even a simpler approach that I can't see for lack of coffee this morning, but this will do the trick, so to speak.

天煞孤星 2024-12-16 04:21:34

改变这个方法

void ParamMethod2(参数对象[] arg)
{
//我想要'arg'包含0,1,2,3而不是0,System.object[]
}

void ParamMethod2(int firstValue,params object[] arg)
{
//现在,第一个值始终为 0,其余传递的变量将具有 1、2、3 等。
}

这就是您所要求的。

请注意,如果您想要一个仅使用 params 作为参数的方法,则会遇到问题,因为您的编译器总是会调用此显式第一个参数签名,而不是仅调用 params 签名方法。

Change this method

void ParamMethod2 (params object[] arg)
{
//I want 'arg' contains 0,1,2,3 instead of 0, System.object[]
}

To

void ParamMethod2 (int firstValue, params object[] arg)
{
//Now, firstvalue always will have 0 and remaining passed variables will have 1,2,3, etc.
}

Hope this is what your asking for.

Note here that you will have a problem if you want to have a method with only params as arguments, because always your compiler will call this explicit first argument signature than params only signature method.

虫児飞 2024-12-16 04:21:34
void ParamMethod1 (params object[] arg)
{
   if(arg == null || arg.Length == 0)
   {
      ParamMethod2(0);
      return;
   }
   var newArray = new int[arg.Length + 1];
   newArray[0] = 0;
   arg.CopyTo(newArray,1);
   ParamMethod2 (newArray); 
}
void ParamMethod1 (params object[] arg)
{
   if(arg == null || arg.Length == 0)
   {
      ParamMethod2(0);
      return;
   }
   var newArray = new int[arg.Length + 1];
   newArray[0] = 0;
   arg.CopyTo(newArray,1);
   ParamMethod2 (newArray); 
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文