C# 中类似 Python 的列表解包?
在 python 中,我可以做这样的事情:
List=[3, 4]
def Add(x, y):
return x + y
Add(*List) #7
有没有办法在 C# 中做到这一点或类似的事情? 基本上,我希望能够将参数列表传递给任意函数,并将它们应用为函数的参数,而无需手动解压列表并调用显式指定参数的函数。
In python, I can do something like this:
List=[3, 4]
def Add(x, y):
return x + y
Add(*List) #7
Is there any way to do this or something similar in C#? Basically I want to be able to pass a List of arguments to an arbitrary function, and have them applied as the function's parameters without manually unpacking the List and calling the function explicitly specifying the parameters.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
好吧,最接近的是反射,但这速度很慢......但是看看 MethodInfo.Invoke...
Well, the closest would be reflection, but that is on the slow side... but look at MethodInfo.Invoke...
您可以在定义方法时使用 params 关键字,然后可以直接将列表(在调用 ToArray 之后)放入方法调用中。
...您稍后可以使用以下命令进行调用。
供参考:http://msdn.microsoft.com/en-us/library/ w5zay9db.aspx
You can use the params keyword when defining your method and then you can directly put your list (after calling ToArray) in your method call.
...which you can later call with the following.
For reference: http://msdn.microsoft.com/en-us/library/w5zay9db.aspx
你不能,你可以做一些接近的事情(要么屈服于 foreach,或者在采用 lambda 的集合上添加 foreach 扩展方法),但没有什么比你在 python 中得到的优雅。
you cant, you can do things that are close with a bit of hand waving (either yield to a foreach, or add a foreach extension method on the collection that takes a lambda), but nothing as elegant as you get in python.
或者:
考虑到它是静态类型的,这是您在 C# 中得到的最接近的结果。 您可以查看 F# 的模式匹配来准确查找您想要的内容。
or:
Is the closest you get in c# considering it's statically typed. You can look into F#'s pattern matching for exactly what you're looking for.