标签: params

我什么时候应该使用 params Object[] 与 Dictionary<String, Object> ?

我将 API 定义为我们将调用的接口,IFoo我想定义一个方法Bar()

此方法Bar()将接受一个必需的参数,然后是任意数量的其他参数。这些其他参数的解释将取决于实现者IFoo

对于这种情况,使用params或使用Dictionary<String, Object>例如定义我的界面更合适

public interface IFoo
{
   bool Bar(String id, params Object[] params);
}
Run Code Online (Sandbox Code Playgroud)

或者

public interface IFoo
{
   bool Bar(String id, Dictionary<String, Object> params);
}
Run Code Online (Sandbox Code Playgroud)

似乎前者更容易让用户调用,但后者的意图更明确,因为对于前者,您必须以特定顺序指定参数,以便实现正确解释它们,而对于后者,您本质上是做命名参数。

所以问题:

  • 我应该使用哪种形式(以及为什么?) - 这些被认为是最佳实践之一吗?
  • 我应该注意一种风格与另一种风格的具体优势吗?其中之一是否被视为代码异味?
  • 是否有替代模式可以以不同/更好的方式实现相同的目标?

作为记录,我知道.Net 4.0 中的命名参数,但此代码需要在 .Net 3.5 上编译,因此不能使用任何 .Net 4.0+ 功能

编辑

只是为了添加更多关于 myIFooBar()methods 实际代表的细节,因为有人问。

IFoo代表一些存储子系统,Bar()实际上是一个创建操作。根据存储子系统的不同,Bar()除了 ID 之外可能不需要其他参数,也可能需要许多参数。

编辑 2

所以为了回应@Kirk Woll 的评论和@Fernando 的回答,这里有更多信息。

我可能永远不会调用 …

.net c# params

5
推荐指数
1
解决办法
2224
查看次数

jquery转到表单提交的URL,并将字段值添加到url字符串

我对jquery相当新,我认为这很简单,但我很挣扎,谷歌似乎没有帮助....

我所拥有的是基本形式......

<form>
First Name: < input type="text" name="firstName" id="firstName" />
Surname: < input type="text" name="surname" id="surname" />
<input type="submit" id="submit" value="submit"/>
</form>
Run Code Online (Sandbox Code Playgroud)

现在,当点击提交时,我想转到一个网址但是然后将froms值添加到url字符串(但不使用表单方法= get)基本上我希望这发生

点击提交转到 http://myurl.com/index.html?params=firstNamevalue*surnamevalue

我一直在用jquery进行攻击,但是我最喜欢的就是这样......

< script src="http://www.google.com/jsapi" type="text/javascript">< /script>
< script type="text/javascript">
    google.load("jquery", "1.3.1");
</script>

< script type="text/javascript">

var = firstName $("#firstName").val();
var = surname $("#surname").val();


$('#submit').click(function(){
  window.location = ???;
}); 
< /script>
Run Code Online (Sandbox Code Playgroud)

希望我一直很清楚 - 我非常感谢任何帮助!

安迪

string url jquery params

4
推荐指数
1
解决办法
5万
查看次数

使用IEnumerable重载params函数

假设我有两个功能:

Foo(params INotifyPropertyChanged[] items)
{
   //do stuff
}

Foo<T>(IEnumerable<T> items) where T : INotifyPropertyChanged
{
   Foo(items.ToArray());
}
Run Code Online (Sandbox Code Playgroud)

第二个允许我Foo从具有约束的泛型类调用where T : INotifyPropertyChanged,但第二个解析为自身,因此我得到堆栈溢出异常.

  1. 是否有可能在出现歧义时指定我想要调用哪个重载?
  2. 是否存在另一种params从泛型类调用函数的方法,假设泛型类型的约束使其成为该params类型的可行选项?

提前致谢!

c# generics params

4
推荐指数
1
解决办法
2676
查看次数

可以使用params通过使用yield的函数通过ref传递变量

如果我有一个带params参数的方法,它可以通过引用传递,并在每次调用yield时更新.

像这样的东西:

public static void GetRowsIter(ref params valuesToUpdate)
{

    foreach(row in rows)
    {
       foreach(param in valuesToUpdate
       {
          GetValueForParam(param)
       }
       yield;
    }
}
Run Code Online (Sandbox Code Playgroud)

这合法吗?(我离开了我的编译器,或者我只是尝试一下.)

c# yield params

4
推荐指数
1
解决办法
2034
查看次数

如何间接引用grails GSP模型变量,例如通过.get(...)

我正在使用GSP发送基于MailService插件的电子邮件.sendMail关闭传递(以及其他)body(view:..., model:myModel)

我知道我只能${itemName}在GSP中使用myModel Map的每个项目.但是,由于我有时想动态地构建项目名称'item'+i,我需要有一些周围的方法来访问变量.

我已经尝试了${model.get('item'+i),${params.get('item'+i)但是,模型为null,params是一个空的Map.我也试过了pageScope,但是虽然我可以访问一个项目,但我${pageScope.itemName无法使用,${pageScope.get('item'+i)}因为pageScope不是Map.

可能有多种解决方案可以解决这个问题; 我很高兴一个简单的;-).我看到的一个解决方案是将myModel作为唯一参数传递,然后始终使用myModel.get(...),但这意味着我必须更改所有现有的GSP以始终引用myModel而不是直接访问项目(具有固定名称); 所以如果有一种方法我不必改变传递给GSP的模型,这将是我的最爱.

如果有人也可以在这种情况下对模型和参数的区别说几句话,那么这将是另外有用的!

grails model map params gsp

4
推荐指数
1
解决办法
6410
查看次数

如何在Grails中将Date值作为参数传递

我看过一些与在Grails中使用g:datePicker相关的帖子.使用它看起来你可以像params.myDate一样从params中选择值.

但是,当我尝试在我看来做这样的事情时:

视图:

<g:link controller="c" action="a" params="[fromDate:(new Date())]">
Run Code Online (Sandbox Code Playgroud)

控制器:

def dateval = params.fromDate as Date
Run Code Online (Sandbox Code Playgroud)

日期未正确解析.我还应该在视图中做些什么来使控制器使日期"可解析".我环顾四周,并没有在任何没有使用datePicker的帖子中找到这个.

grails groovy date params

4
推荐指数
1
解决办法
9512
查看次数

rails,如何从url字符串获取params?

可能重复:
如何在Rails测试中使用参数轻松解析URL?

对不起我的英语不好...

我在我的archives.rb模型中获取了一个从html内容中获取所有src属性的方法,我得到src的样子:

http://localhost:3000/es/editor/archives/28/show_image?x=142&y=142

我需要从该URL获取params,具体来说:id,x,y

感谢和问候.

ruby url ruby-on-rails params ruby-on-rails-3

4
推荐指数
2
解决办法
1万
查看次数

我可以将params列表转发/委托给另一种方法吗?

我可以将params参数转发给另一个方法吗?

例如,

void MyStringMethod(string format, params object[] list)
{
  String.Format(format, list);
} 
Run Code Online (Sandbox Code Playgroud)

c# parameters params

4
推荐指数
1
解决办法
4052
查看次数

API参数中的连字符

这个问题的答案特别提到使用params [:body-plain].但是,Rails抛出此错误:NameError (undefined local variable or method 'plain' for #<IncomingMailsController:0x0000000913f278>):

如何访问带有连字符的参数?我无法更改params,因为它们是从第三方API(Mailgun)发布的.

api ruby-on-rails params

4
推荐指数
1
解决办法
1048
查看次数

通过link_to合并嵌套参数

我正在使用嵌套的params(通过hansack嵌套为q)和普通的params一起在页面上构建链接,当我尝试将嵌套的params与其他params合并时,我很难让两者完美地玩.

例如,如果我有:

{"freq"=>"weekly", "loan_amount"=>"350000",
"q"=>{"lowEquity_true"=>"1", "s"=>"rate asc"}}
Run Code Online (Sandbox Code Playgroud)

并尝试构建一个链接来更改param"lowEquity_true"

rates_url(params[:q].merge(:lowEquity_true => '0'))
Run Code Online (Sandbox Code Playgroud)

然后我最终得到了下面的新参数,看起来像是更新了q但是丢掉了其余的参数.

{"lowEquity_true"=>"0", "s"=>"rate asc"}
Run Code Online (Sandbox Code Playgroud)

如果我试图将q&merge合并到其他参数中,它不会更新q,只是将q中的内容合并到其他参数中

rates_url(params[:q].merge(:lowEquity_true => '0').merge(params))

{"freq"=>"weekly", "loan_amount"=>"350000", "lowEquity_true"=>"0",
 "q"=>{"lowEquity_true"=>"1", "s"=>"rate asc"},
 "s"=>"rate asc"}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了各种各样的组合,似乎没有任何地方,所以我确信我错过了一些基本的东西!

merge params nested-attributes ruby-on-rails-3 ransack

4
推荐指数
1
解决办法
4087
查看次数