C# 中类似 Python 的列表解包?

发布于 2024-07-14 15:39:08 字数 206 浏览 4 评论 0原文

在 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 技术交流群。

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

发布评论

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

评论(4

离旧人 2024-07-21 15:39:08

好吧,最接近的是反射,但这速度很慢......但是看看 MethodInfo.Invoke...

Well, the closest would be reflection, but that is on the slow side... but look at MethodInfo.Invoke...

初见你 2024-07-21 15:39:08

您可以在定义方法时使用 params 关键字,然后可以直接将列表(在调用 ToArray 之后)放入方法调用中。

public static void UseParams(params object[] list)
{
        for (int i = 0; i < list.Length; i++)
        {
            Console.Write(list[i] + " ");
        }
        Console.WriteLine();
}

...您稍后可以使用以下命令进行调用。

object[] myObjArray = { 2, 'b', "test", "again" };
UseParams(myObjArray);

供参考: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.

public static void UseParams(params object[] list)
{
        for (int i = 0; i < list.Length; i++)
        {
            Console.Write(list[i] + " ");
        }
        Console.WriteLine();
}

...which you can later call with the following.

object[] myObjArray = { 2, 'b', "test", "again" };
UseParams(myObjArray);

For reference: http://msdn.microsoft.com/en-us/library/w5zay9db.aspx

假扮的天使 2024-07-21 15:39:08

你不能,你可以做一些接近的事情(要么屈服于 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.

﹏雨一样淡蓝的深情 2024-07-21 15:39:08
Func<List<float>, float> add = l => l[0] + l[1];
var list = new List<float> { 4f, 5f };
add(list); // 9

或者:

Func<List<float>, float> add = l => l.Sum();
var list = new List<float> { 4f, 5f };
add(list); // 9

考虑到它是静态类型的,这是您在 C# 中得到的最接近的结果。 您可以查看 F# 的模式匹配来准确查找您想要的内容。

Func<List<float>, float> add = l => l[0] + l[1];
var list = new List<float> { 4f, 5f };
add(list); // 9

or:

Func<List<float>, float> add = l => l.Sum();
var list = new List<float> { 4f, 5f };
add(list); // 9

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文