c# – 可变数量的参数,而不包含值类型?

public void DoSomething(params object[] args)
{
    // ...
}

上述签名的问题是,将传递给该方法的每个值类型将被隐式包装,这对我来说是严重的性能问题.

有没有办法解决一个接受可变数量的参数的方法,而不用包装value-types?

谢谢.

解决方法

你可以使用泛型:
public void DoSomething<T>(params T[] args)
{
}

但是,这只允许指定单一类型的ValueType.如果您需要混合或匹配值类型,则必须像现在所做的那样允许拳击发生,或为不同数量的参数提供特定的重载.

编辑:如果您需要多种类型的参数,您可以在某种程度上使用重载来完成此操作.

public void DoSomething<T,U>(T arg1,params U[] args) {}
public void DoSomething<T,T arg2,params U[] args) {}

不幸的是,这需要为您的类型存在多个重载.

或者,您可以直接传递数组:

public void DoSomething<T,U>(T[] args1,U[] args2) {}

你失去了很好的编译器语法,但是你可以传递任意数量的两个参数.

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...