可变数量的参数而不装箱值类型?

2024-03-09

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

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

有没有办法声明一个接受可变数量参数而不装箱值类型的方法?

Thanks.


您可以使用泛型:

public void DoSomething<T>(params T[] args)
{
}

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


编辑:如果您需要不止一种类型的参数,则可以在某种程度上使用重载来完成此任务。

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

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

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

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

您会失去良好的编译器语法,但随后您可以传递任意数量的两个参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可变数量的参数而不装箱值类型? 的相关文章

随机推荐