使用params关键字与List作为某些c#函数的输入有什么利弊?
主要是性能考虑因素和其他权衡因素.
传递一些参数和重定向的最佳方法是什么?
我看到的例子说,如果你只是将它们添加到你的重定向哈希中,它们会传递请求,但这似乎在Rails 3中不再起作用了.
在我的示例中,我有一个"编辑多个"页面,允许用户一次更改多个项目的类别.因为他们正在浏览这么多项目,所以这个表格是分页的.
如果用户打开items page 3,进行一些更改并按下sumbit,则控制器操作会收到一条帖子请求,其中包含已更改的记录的ID,进行更改并重定向到edit_many_items_path.
所以,重定向看起来像这样:
redirect_to edit_multiple_items_path, :notice => 'items updated'
Run Code Online (Sandbox Code Playgroud)
...但我想要它做的是:
redirect_to edit_multiple_items_path, :notice => 'items updated', :page => ##
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用,那么有没有人会有什么样的例子呢?
我有一个使用params关键字的方法,如下所示:
private void ParamsMethod(params string[] args)
{
// Etc...
}
Run Code Online (Sandbox Code Playgroud)
然后,我使用各种参数组合调用该方法:
// Within the method, args is...
ParamsMethod(); // - a string array with no elements
ParamsMethod(null); // - null (Why is this?)
ParamsMethod((string)null); // - a string array with one element: null
ParamsMethod(null, null); // - a string array with two elements: null and null
ParamsMethod("s1"); // - a string array with one element: "s1"
ParamsMethod("s1", "s2"); // - a string array with two elements: "s1" and …Run Code Online (Sandbox Code Playgroud) params在C#中可以有多个参数吗?像这样的东西:
void foobar(params int[] foo, params string[] bar)
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否可行.如果是,编译器将如何决定在哪里拆分参数?
使用select_date给我回params[:my_date]用year,month和day属性.如何轻松获取Date对象?我希望有类似的东西params[:my_date].to_date.
我也乐意使用date_select它.
考虑这个方法签名:
public static void WriteLine(string input, params object[] myObjects)
{
// Do stuff.
}
Run Code Online (Sandbox Code Playgroud)
如何确定WriteLine方法的"myObjects"参数使用params关键字并且可以采用变量参数?
作为一个以groovy开头的tcl开发人员,我对groovy中的列表和地图支持感到有些惊讶.也许我在这里遗漏了一些东西.
我习惯在tcl中即时转换字符串,列表和数组/映射.在tcl中,类似于
"['a':2,'b':4]".each {key, value -> println key + " " + value}
Run Code Online (Sandbox Code Playgroud)
是可能的,在groovy中,每个命令都会遍历字符串的每个字符.
这可能是一个很大的问题,因为我可以轻松地使用像split或tokenize命令这样的东西,但由于序列化的列表或映射不仅仅是"a:2,b:4",因此解析起来有点困难.
似乎griffon开发人员使用stringToMap库(http://code.google.com/p/stringtomap/),但该示例也无法处理序列化地图.
所以现在我的问题是:在groovy中解析地图或列表的最佳方法是什么?
干杯,拉尔夫
PS:这是一个时髦的问题,但我用grails标记了它,因为我需要grails的这个功能,我想通过URL传递地图
更新:对我来说,这仍然是一个悬而未决的问题......所以这里有一些针对同样问题的人的更新:
.toString()会导致在所有情况下都无法转换回地图的东西,但是.inspect()会给你一个可以回溯到地图的String!.encodeAsJSON()并且JSON.parse(String)- 两者都很棒,但我还没有检查解析器将使用JSON函数做什么(可能的安全问题)我需要测试一个$routeParams用于定义动作的Controller .也许这是一个测试问题,或者我编写控制器的方式是错误的,所以现在我无法编写测试.
这是我的控制器
angular.module('cmmApp')
.controller('UserCtrl', function ($scope, $location, $routeParams, $ionicLoading, $ionicPopup, Userservice) {
//if a user id is set retrieve user information
if(typeof $routeParams.id !== 'undefined'){
var loader = $ionicLoading.show({content: "Retrieving user data"});
var user = Userservice.get({id: $routeParams.id}).$promise;
user.then(function(res){
console.log(res);
$scope.user = res.user;
loader.hide();
});
}
//else create an empty resource
else {
$scope.user = new Userservice;
}
});
Run Code Online (Sandbox Code Playgroud)
基本上我只想在提供id的情况下加载资源$routeParams,否则创建一个空资源.
以下是测试:
'use strict';
describe('Controller: UserCtrl', function () {
// load the controller's module
beforeEach(module('cmmApp'));
var UserCtrl, …Run Code Online (Sandbox Code Playgroud) 我有一个从数据库中获取值的方法.
public virtual List<TEntity> GetValues(
int? parameter1 = null,
int? parameter2 = null,
int? parameter3 = null,
params Expression<Func<TEntity, object>>[] include)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
如何使用命名参数调用此函数以不在之前写入所有参数include?我想做这样的事情
var userInfo1 = Unit.UserSrvc.GetValues(include: p => p.Membership, p => p.User);
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用?如何在params中使用命名参数?
我们刚刚在代码中找到了这些:
public static class ObjectContextExtensions
{
public static T Find<T>(this ObjectSet<T> set, int id, params Expression<Func<T, object>>[] includes) where T : class
{
...
}
public static T Find<T>(this ObjectSet<T> set, int id, params string[] includes) where T : class
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,除了params.之外,它们具有相同的签名.
它们被用于多种方式,其中之一:
DBContext.Users.Find(userid.Value); //userid being an int? (Nullable<int>)
Run Code Online (Sandbox Code Playgroud)
对我来说奇怪的是,它解决了第一次超载.
Q1:为什么这不会产生编译错误?
Q2:为什么C#编译器将上述调用解析为第一种方法?
编辑:只是为了澄清,这是C#4.0,.Net 4.0,Visual Studio 2010.
params ×10
c# ×6
.net ×2
.net-3.5 ×1
angularjs ×1
function ×1
grails ×1
groovy ×1
jasmine ×1
karma-runner ×1
list ×1
map ×1
optimization ×1
overloading ×1
parameters ×1
redirect ×1
reflection ×1
roslyn ×1
routes ×1
routing ×1
ruby ×1
string ×1