何时使用 params 作为方法参数的真实示例是什么?

发布于 2024-11-04 13:51:27 字数 103 浏览 2 评论 0原文

据我了解, params 只是语法糖,“在幕后”只是为您提供了您指定类型的数组。

首先,你什么时候会使用这个?

其次,为什么要使用它而不是仅仅声明一个数组参数?

As I understand it, params is just syntactic sugar that "under the hood" simply gives you an array of the type you specify.

First, when would you use this?

Second, why would you use it instead of just declaring an array argument?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(5

丘比特射中我 2024-11-11 13:51:27

Math.Min 仅接受两个参数。这是一个愚蠢的限制。许多其他语言允许您编写:

double x, y, z, w;
double least = min(x, y, z, w);

如果您想编写一个可以像这样使用的 min 函数,您需要使用 params

Math.Min takes exactly two arguments. This is a stupid limitation. Many other languages allow you to write:

double x, y, z, w;
double least = min(x, y, z, w);

If you wanted to write a min function that could be used like that, you'd want to use params.

〃温暖了心ぐ 2024-11-11 13:51:27

一个明显的例子可以在像String.Format()这样的方法中找到。使用 params 的这条语句很容易理解:

string.Format("Your name is {0}, {1}", lastName, firstName);

但是如果没有 params,那就有点困难了:

string.Format("Your name is {0}, {1}", new string[] { lastName, firstName });

我发现自己在像这样的字符串函数中使用了很多 params。我使用它只是为了提高代码的可读性。

An obvious example can be found in a method like String.Format(). This statement using params is easy to follow:

string.Format("Your name is {0}, {1}", lastName, firstName);

But without params it's a bit more difficult:

string.Format("Your name is {0}, {1}", new string[] { lastName, firstName });

I find myself using params alot for string functions like these. I use it just to improve the readability of the code.

紫﹏色ふ单纯 2024-11-11 13:51:27

我使用它的一种方法是将 sql 查询传递给我的包装类。我将有一些带有可变数量参数的sql。这样我就可以列出我随查询发送的所有参数,而不是先创建一个数组。

    SQLWrapper.Query(" some sql with parameters", new SqlParameter("@param1", val1),
                                                  new SqlParameter("@param1", val1),
                                                  new SqlParameter("@param1", val1));

比替代方案好得多:

SQLWr

apper.Query(" some sql with parameters", new SqlParameter[]{new SqlParameter("@param1", val1),
                                                      new SqlParameter("@param1", val1),
                                                      new SqlParameter("@param1", val1)});

当您遇到需要可变数量参数的情况时,使用它会很好。

One way that I used it is in passing sql queries off to my wrapper class. I'll have some sql with a variable number of parameters in it. This way I can just list all of the parameters I'm sending with the query rather than creating an array first.

    SQLWrapper.Query(" some sql with parameters", new SqlParameter("@param1", val1),
                                                  new SqlParameter("@param1", val1),
                                                  new SqlParameter("@param1", val1));

Much nicer than the alternative:

SQLWr

apper.Query(" some sql with parameters", new SqlParameter[]{new SqlParameter("@param1", val1),
                                                      new SqlParameter("@param1", val1),
                                                      new SqlParameter("@param1", val1)});

Its nice to have when you run into a situation where you need a variable number of arguments.

弥枳 2024-11-11 13:51:27

基类库中的一个示例是String.Split(params char[]separator),允许您编写,例如:

var segs = myString.Split(',',';',' ');

而不是

var sets = myString.Split(new char[] {',', ';', ' '});

An example from the Base Class library is String.Split(params char[] separator), allowing you to write, for example:

var segs = myString.Split(',',';',' ');

rather than

var sets = myString.Split(new char[] {',', ';', ' '});
心清如水 2024-11-11 13:51:27

我发现自己使用参数的主要不漂亮/更容易理解的原因是执行存储过程。

以数据库中有数百个存储过程的情况为例。那么你实际上只有两个选择

1:为每个存储过程单独编写代码,这将需要几个月的时间

2:创建一个通用执行器方法,它将运行任何存储过程并接受任何数字和参数。参数类型例如

databaseHelper.ExecuteStoredProcedure(
                "myStoredProecdure",
                DbProviderHelper.StringParameter("@parameter_string", somestring),
                DbProviderHelper.BoolParameter("@parameter_string", somebool),
                DbProviderHelper.IntParameter("@parameter_int", someint));   

The main non-prettier / easier to understand reason I find myself using params is in executing stored procedures.

Take the case where you have several hundred stored procedures in a database. Then you really only have two choices

1: Write code individually for each stored procedure which would take months

2: Create a generic executor method which will run any stored procedure and take any number & type of parameters e.g.

databaseHelper.ExecuteStoredProcedure(
                "myStoredProecdure",
                DbProviderHelper.StringParameter("@parameter_string", somestring),
                DbProviderHelper.BoolParameter("@parameter_string", somebool),
                DbProviderHelper.IntParameter("@parameter_int", someint));   
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文