有没有办法从C#中的方法创建和返回新变量?
基本上就像使用out关键字一样。但out关键字的问题在于,您仍然必须在方法调用之外声明一个变量,如:有没有办法从C#中的方法创建和返回新变量?,c#,.net,C#,.net,基本上就像使用out关键字一样。但out关键字的问题在于,您仍然必须在方法调用之外声明一个变量,如: double result; Double.TryParse ( "76", out result ); 我想要的是: Double.TryParse ( "76", out result ); 在那里我得到了一个新的变量,叫做result 有没有办法做到这一点(使用out或not)?没有,你必须先声明变量,因为你要将它传递给方法,唯一的区别是你明确要求方法在返回之前填写它。没有,你必须先声
double result;
Double.TryParse ( "76", out result );
我想要的是:
Double.TryParse ( "76", out result );
在那里我得到了一个新的变量,叫做result
有没有办法做到这一点(使用out或not)?没有,你必须先声明变量,因为你要将它传递给方法,唯一的区别是你明确要求方法在返回之前填写它。没有,你必须先声明变量,因为你要将它传递给方法,唯一的区别是,您明确要求方法在返回之前填写它。在调用之前声明它有什么问题?在调用之前声明它有什么问题?为什么要这样做?没有理由不在方法调用之前声明它,请保存几个按键。为什么要这样做?没有理由不在方法调用之前声明它,请保存几次击键。您的szenario是否有任何意义
为了在调用函数后使用变量,必须知道变量的类型。否则,您将忽略编译器的类型安全性,并可能很容易遇到运行时错误。您的szenario是否有安全感 为了在调用函数后使用变量,必须知道变量的类型。否则,您将忽略编译器的类型安全性,并且很容易运行时出错。此外,您可以“重新引用”它,也就是说,您将它作为输出再次传递到堆栈上。例如:
public void MyMethod(out int MyParam)
{
SomeMethod(out MyParam);
}
此外,您还可以“重新引用”它,也就是说,您将它作为输出再次传递到堆栈中。例如:
public void MyMethod(out int MyParam)
{
SomeMethod(out MyParam);
}
变量存在于堆栈上,而不是堆上,因此调用函数来创建新变量的概念——虽然这是一个有趣的想法,在其他语言中也并非不可能——意味着您不理解C#中变量和对象之间的区别
- 变量的存储在堆栈上分配,并且变量只在声明变量的函数执行期间存在
编辑:在C#中,“out”参数与“ref”参数类似,因为它们都是参数,而不是更典型的按值调用参数。变量位于堆栈上,而不是堆上,因此,调用函数来创建新变量的概念——虽然这是一个有趣的想法,在其他语言中并非不可能——意味着您不理解C#中变量和对象之间的区别
- 变量的存储在堆栈上分配,并且变量只在声明变量的函数执行期间存在
编辑:在C#中,“out”参数类似于“ref”参数,因为它们都是参数,而不是更典型的按值调用参数。否,您必须将其包装在另一个方法中,该方法声明局部变量,然后返回它 根据您给出的具体示例,您可以使用:
Double d = Double.Parse( "76" );
不,您必须将其包装在另一个方法中,该方法声明一个局部变量,然后返回它 根据您给出的具体示例,您可以使用:
Double d = Double.Parse( "76" );
您可以使用来将多个变量组合成一个您可以使用来将多个变量组合成一个在使用变量之前必须先声明它,并且具有多个参数的方法很快就会变得难闻。特别是输出参数 我认为您要做的是声明一个包含五个或六个变量的类,并将其作为参数传递给方法:
class Args
{
public int One { get; set; }
public int Two { get; set; }
public int Three { get; set; }
public int Four { get; set; }
public int Five { get; set; }
}
然后,将其作为参数的方法:
public void Foo(Args args)
{
// Modify members of args here.
}
然后像这样使用它:
Args args = new Args();
Foo(args);
// Do stuff with results in args.
一个变量在使用前必须声明,而一个包含多个参数的方法很快就会变得难闻。特别是输出参数 我认为您要做的是声明一个包含五个或六个变量的类,并将其作为参数传递给方法:
class Args
{
public int One { get; set; }
public int Two { get; set; }
public int Three { get; set; }
public int Four { get; set; }
public int Five { get; set; }
}
然后,将其作为参数的方法:
public void Foo(Args args)
{
// Modify members of args here.
}
然后像这样使用它:
Args args = new Args();
Foo(args);
// Do stuff with results in args.
你只是想在这里创建一个IsNumeric函数,这就是为什么你不想创建变量的原因吗?不,否则我会把它作为常规参数传递,然后得到一个bool。我关心的不是仅仅为了传递变量而声明很多变量。它没有那么有用,因为你只是这样做,然后你可以把它传递给某个方法。它基本上可以归结为你的第二个代码片段是第一个的语法糖吗?在C#3.0中答案是否定的:-)是的,或者是一个特性,因为这样你可以在一个方法中声明多个返回的变量。你知道这个功能是否会出现在4.0中吗。我自己在4.0中没有看到过这个功能。在4.0中不太可能看到。但是,C#4.0确实有可选参数。如果它们还实现了可选的Out参数,那么至少不需要为未使用的Out参数声明未使用的变量