我知道这是一个基本问题,但我找不到答案.
为什么要用它?如果你编写一个函数或一个使用它的方法,当你删除它时代码仍然可以正常工作,100%没有它.例如:
使用params:
static public int addTwoEach(params int[] args)
{
int sum = 0;
foreach (var item in args)
sum += item + 2;
return sum;
}
Run Code Online (Sandbox Code Playgroud)
没有参数:
static public int addTwoEach(int[] args)
{
int sum = 0;
foreach (var item in args)
sum += item + 2;
return sum;
}
Run Code Online (Sandbox Code Playgroud) 我创建了一个名为的自定义视图Graphview
.这是GraphView类的结构.
public class GraphView extends View {
public GraphView(Context context, float[] values, String title, String[] horlabels, String[] verlabels, boolean type) {
super(context);
........
}
..................
.................
}
Run Code Online (Sandbox Code Playgroud)
我已经在一个tablerow中添加了视图addview()
.它工作正常.现在我想设置高度和宽度GraphView
.怎么做?
在C#中,如果您希望方法具有不确定数量的参数,则可以在方法签名中创建最终参数a params
,以使方法参数看起来像一个数组,但允许使用该方法的每个人传递该类型的参数正如来电者想要的那样.
我很确定Java支持类似的行为,但我无法找到如何做到这一点.
为什么我不能使用带有参数的IEnumerable?这会被解决吗?我真的希望他们能重写旧库以使用泛型......
如何创建一个具有可选参数和参数的方法?
static void Main(string[] args)
{
TestOptional("A",C: "D", "E");//this will not build
TestOptional("A",C: "D"); //this does work , but i can only set 1 param
Console.ReadLine();
}
public static void TestOptional(string A, int B = 0, params string[] C)
{
Console.WriteLine(A);
Console.WriteLine(B);
Console.WriteLine(C.Count());
}
Run Code Online (Sandbox Code Playgroud) public void Foo(params string[] values)
{
}
Run Code Online (Sandbox Code Playgroud)
有可能values
是null
,或者总是设置0
或更多的项目?
C#是否支持可变数量的参数?
如果是,C#如何支持变量no参数?
有什么例子?
变量参数如何有用?
编辑1:对它有什么限制?
编辑2:问题不是关于可选参数而是变量参数
假设我有两个输入框,其对应的ng-model为fname和lname.如果我将http请求称为:
$http({method:'GET', url:'/search', params:{fname: fname, lname: lname}})
Run Code Online (Sandbox Code Playgroud)
它会调用网址:
/search?fname=fname&lname=lname
Run Code Online (Sandbox Code Playgroud)
我在后端(python)得到的错误是:
cannot concatenate str and nontype objects.
Run Code Online (Sandbox Code Playgroud)
这些参数不是作为字符串发送的吗?如果没有,如何解决这个问题?
我正在使用众所周知的TYPE_SYSTEM_OVERLAY
方法创建一个始终位于其他视图之上的全屏叠加层.
上的Moto Atrix2 API15
和每个AVD
从API 10
通过17
重叠视图自动调整时的状态栏中被另一个应用程序隐藏(垂直扩展).正如我认为的那样,叠加层似乎"保持在所有其他视图的顶部".当状态栏再次处于视图中时,叠加层会再次自动缩小其大小(较少的垂直像素,基本上减去状态栏的高度).
这是期望的行为,我倾向于认为这不是例外或有缺陷的行为,因为它在许多不同的模拟器以及至少一个设备制造商(摩托罗拉)上工作,可能更多,但我无法访问addtl devices.
问题: 在一个Samsung GS2 (API15)
&也经过测试时Kindle Fire (API10?)
,当状态栏被另一个应用程序(全屏应用程序后面的状态栏)隐藏时,叠加层不会自动调整大小(填充状态栏曾经的空间).在这些设备上,在创建视图后,我第一次从视图的onSizeChanged覆盖中不再获取任何事件.
这是相关的代码:
params = new WindowManager.LayoutParams(
1, WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
|WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSPARENT);
wm.addView(sizeLayout, params);
Run Code Online (Sandbox Code Playgroud)
sizeLayout具有onSizeChanged覆盖.
我已经玩过几乎所有windowmanager
layoutparam
我能找到的东西,包括SYSTEM_ALERT,FLAG_LAYOUT_IN_SCREEN等等.直到我弄清楚这一点我才会睡觉!
编辑11/30/12:我从@deviant发现了这个:https://stackoverflow.com/a/9195733/1851478 这基本上就是我正在做的事情,但问题仍然是某些设备没有自动调整system_overlay的大小.也许我应该提出一个错误.
更多信息:如果我强制重绘(或者甚至只是加载覆盖应用程序),而在视图树顶部有一个全屏应用程序,我的覆盖仍然不会覆盖状态栏通常占用的空间(即使在绘制时状态栏不在视图中,因此看起来好像叠加层没有"覆盖"在最前面的全屏幕窗口的顶部(我已经创建并测试了许多全屏应用程序使用各种方法让它们全屏显示).在这些设备上,使覆盖层绘制状态栏的唯一方法是(即使状态栏不在视图中)是使用标志FLAG_LAYOUT_IN_SCREEN
,但布局的大小永远不会改变,总是全屏,并且因此回到原来的问题,为什么这适用于某些设备但不适用于其他设备.
编辑12/12/12:所以我没有在这方面有任何进一步的运气,我确实尝试在视图上使用getLocalVisibleRect,但遗憾的是,由于我的应用程序不拥有SystemUI视图,因此无法检测覆盖层下面的内容.我想用自定义ROM我可以做到这一点,但我需要一个没有root的解决方案.
我确实看到市场上的其他应用程序在检测上面列出的非工作电话上的状态栏时遇到同样的问题.示例:酷工具,欧米茄状态栏和状态栏+.赏金提出来了.
编辑12/19/12图片添加.请注意,在工作设备上,灰色区域也"覆盖"黑色区域(任何当前全屏应用),黑色区域实际上覆盖整个屏幕,我只是将灰色区域显示为我的叠加,即使它也是全屏(减去或加上状态栏的高度,具体取决于工作/非工作设备以及是否在视图中).
使用以下check_box_tag:
<%= check_box_tag 'object[boolean_attribute]', 1, object.boolean_attribute %>
Run Code Online (Sandbox Code Playgroud)
我只能在一个方向更新boolean_attribute:从false到true.
如果默认情况下未选中(因为object.boolean_attribute为false)并且我检查它然后提交表单,则发布a:boolean_attribute => 1参数.
但是,当我尝试从true更新为false时,没有传递param,因此boolean_attribute保持为true.
换句话说,默认情况下检查时(因为object.boolean_attribute为true)并且我取消选中它然后提交表单,则不会发布:boolean_attribute => 0 .
如何取消选中此check_box_tag以发布:boolean_attribute => 0参数?
从api我无法弄清楚是否有一些选项可以轻松实现它:http: //api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag
谢谢.
编辑
出于某种原因,我无法理解,在我的实际代码中(使用嵌套的多对多关联),hidden_field_tag无效.
<%= hidden_field_tag 'order[preparations_attributes][][cooked]', nil %>
<%= check_box_tag 'order[preparations_attributes][][cooked]', '1', preparation.cooked? %>
Run Code Online (Sandbox Code Playgroud)
现在我遇到了相反的问题:我可以取消选中复选框,并按照预期更新准备工作,但是如果我选中复选框,它会使参数更加混乱.
以下是未选中框的已发布参数:
Parameters: {"utf8"=>"?", "authenticity_token"=>"bGgPGbk+Cuk2q+LEgqetmk4e7xie8dB3iMP9Cj3SUm0=", "order"=>{"customer_name"=>"Duccio Armenise", "duedate"=>"2012-04-25 09:24:00.000000", "preparations_attributes"=>[{"quantity"=>"1", "description"=>"custom recipe", "kind"=>"custom", "cooked"=>"", "recipe_id"=>"9", "id"=>"86", "quantities_attributes"=>[{"ingredient_id"=>"", "qty"=>"", "_destroy"=>"0"}, {"ingredient_id"=>"11", "qty"=>"5.0", "id"=>"193", "_destroy"=>"0"}], "_destroy"=>"0"}], "add_preparation"=>{"recipe_id"=>""}}, "continue"=>"Confirm", "id"=>"31"}
Run Code Online (Sandbox Code Playgroud)
现在看看当我检查复选框时出现了一些混乱,从"cooked"=>""开始,出于某种原因,Rails太早关闭了prepare_attributes哈希!
Parameters: {"utf8"=>"?", "authenticity_token"=>"bGgPGbk+Cuk2q+LEgqetmk4e7xie8dB3iMP9Cj3SUm0=", "order"=>{"customer_name"=>"Duccio Armenise", "duedate"=>"2012-04-25 09:24:00.000000", "preparations_attributes"=>[{"quantity"=>"1", "description"=>"custom recipe", "kind"=>"custom", "cooked"=>""}, …
Run Code Online (Sandbox Code Playgroud)