C# 有没有办法省略掉参数?
假设我有一个带有C# 有没有办法省略掉参数?,c#,parameter-passing,out-parameters,C#,Parameter Passing,Out Parameters,假设我有一个带有out参数的函数,但是我不需要它的值。如果给定的结果将被丢弃,是否有方法不传递实际参数 编辑: 尽管这个问题已被投票否决 只有当您从方法创建者的角度来看时,才会出现这种情况。如果您是该方法的用户,您不想让参数成为可选的,只想在不声明变量的情况下使用它。虽然这是不可能的,但是可以在方法调用中声明它。因此,不是: int unusedValue; TryGetValue("key", out unusedValue); 你会得到: TryGetValue("key", out in
out
参数的函数,但是我不需要它的值。如果给定的结果将被丢弃,是否有方法不传递实际参数
编辑:
尽管这个问题已被投票否决
只有当您从方法创建者的角度来看时,才会出现这种情况。如果您是该方法的用户,您不想让参数成为可选的,只想在不声明变量的情况下使用它。虽然这是不可能的,但是可以在方法调用中声明它。因此,不是:
int unusedValue;
TryGetValue("key", out unusedValue);
你会得到:
TryGetValue("key", out int unusedValue);
甚至:
TryGetValue("key", out _);
这应作为答案添加,但:
- 我不能为这个问题这样做,因为它被标记为一个傻瓜李>
- 这个问题看起来像是一个骗局,实际上要求的是另一件事
- 您不能这样做,但没有规则规定必须使用返回的值。您可以简单地传递一个不再使用的临时变量
C#4.0允许可选参数,但
out
参数不能是可选的
编辑:顺便说一句,您还可以重载该方法:
int DoStuff()
{
int temp;
return DoStuff(out temp);
}
int DoStuff(out outParam)
{
//...
}
虽然您实际上不能使out参数成为可选的,但是您可以简单地为没有out参数的函数创建重载,这样就不需要创建临时变量了
public void DoSomething(int param1, out int param2)
{
/* Method work here */
}
public void DoSomething(int param1)
{
int temp;
DoSomething(param1, out temp);
}
不确定C#,但在VB.Net中,您可以简单地将常量传递给输出(byref)参数。因此,如果您有一个整数作为输出参数,则不必传入实际变量,只需传入0或任何其他有效整数即可。对于对象,包括字符串,您可以不传入任何内容(在C#中为Null),一切正常。我不确定变量存储在哪里,可能只是在堆栈上,就像在您传入的任何其他参数中一样,当函数退出时,它就会消失。我知道我不必使用它。我也不想传递任何变量。不过,这是答案,谢谢。这个答案更实用。如果您想使用它或不再使用它,以后无需修改。如果您不拥有正在调用的方法,您可以创建一个扩展方法来为您虚拟输出参数。我尝试了一下,不幸的是,它不起作用<代码>错误CS1510:ref或out参数必须是可赋值变量。