C#中lua`局部变量=var1或var2`的类似物是什么?
我非常熟悉lua,我想执行w简单变量集值 在卢阿:C#中lua`局部变量=var1或var2`的类似物是什么?,c#,coronasdk,C#,Coronasdk,我非常熟悉lua,我想执行w简单变量集值 在卢阿: local variable = var1 or var 2 这意味着如果存在var1,则将variable的值设置为var1,否则将其设置为var2。 如何在C#中实现这样的方程?我只是想知道怎么做这样的事 编辑 因此,在我的特殊情况下: public GameObject to (GameObject localTarget, string[][] transitionParams) { int delay = transitio
local variable = var1 or var 2
这意味着如果存在var1
,则将variable
的值设置为var1
,否则将其设置为var2
。
如何在C#中实现这样的方程?我只是想知道怎么做这样的事
编辑
因此,在我的特殊情况下:
public GameObject to (GameObject localTarget, string[][] transitionParams)
{
int delay = transitionParams.delay;
int timer = transitionParams.timer;
int x = transitionParams.x;
int y = transitionParams.y;
}
如何检查这些参数是否已设置?transitionParams
中的每一个都可以是nil
。它们都是可选的。与Lua不同,C#不允许引用不存在的变量。但是,它允许您引用设置为null
的变量,并跳过null
值,如下所示:
var variable = var1 ?? var2;
public GameObject(
string name
, int? x = null
, int? y = null
, int? delay = null
, int? timer = null
);
如果variable
的值不是null
,则将其设置为var1
的值;否则,它会将其设置为var2
的值
为了使其工作,var1
必须是可空的,即它应该是class
类型的变量,或者是struct
类型的System.nullable
我只想在单个数组中传递
x
、y
、name
、delay
和timer
值name
将是一个string
,其余的int
<代码>名称是唯一需要的值
C#提供了一种传递命名参数的机制。如果将其与设置默认值的功能结合起来,则可以构建如下所示的API:
var variable = var1 ?? var2;
public GameObject(
string name
, int? x = null
, int? y = null
, int? delay = null
, int? timer = null
);
通过提供参数名称,您可以使用16种可选项的任意组合来调用它:
var unicorn = new GameObject("unicorn", x:12, delay:24);
var bunny = new GameObject("bunny", x:40, y:30, timer:0);
在C#中,局部变量是在编译时定义的,这真的没有意义。如果变量“不存在”,代码将无法编译。C#不允许按您所示的方式从整个数组中分割单个字段,否则,就像dasblinkenlight在回答中所说的那样,只需检查
null
。好吧,如果我的函数可能接收到4个变量,那么其中3个是可选的吗?那么我能不能通过考试?如何将它们分配给函数中的局部变量?@Lukis您可以通过为变量提供默认值使其成为可选变量,例如void foo(int a,int?b=null,int?c=null,int?d=null)
至少接受一个参数,最多接受四个参数。如果调用方不提供参数,则方法会将其值视为null
。一旦参数被传递到函数中,它的行为就像局部变量一样,即调用者看不到对它的更改。唯一的例外是ref
和out
参数。听起来不错。但是如何用可选值传递数组呢?我最近将示例代码添加到question@Lukis您添加的代码没有多大意义,因为您正在传递字符串数组,然后尝试访问其上的delay
、timer
、x
和y
属性。字符串数组的数组没有此类属性。与其猜测方法的签名,不如展示一下您希望如何调用方法,以及希望它接收的所有可能的参数组合。我只想在单个数组中传递x
、y
、name
、delay
和timer
值。名称将是一个字符串
,其余的int
。Name是唯一需要的值。