public void DoSomething(params object[] args)
{
// ...
}
上述签名的问题在于,将传递给该方法的每个值类型都将被隐式装箱,这对我来说是一个严重的性能问题。
有没有一种方法可以取消不接受值类型的框而接受可变数量的参数的方法?
谢谢。
最佳答案
您可以使用泛型:
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) {}
您失去了很好的编译器语法,但是随后可以传递任意数量的两个参数。
关于c# - 可变数量的参数而无需将值类型装箱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1890981/