有没有办法从C#中的方法创建和返回新变量?

有没有办法从C#中的方法创建和返回新变量?,c#,.net,C#,.net,基本上就像使用out关键字一样。但out关键字的问题在于,您仍然必须在方法调用之外声明一个变量,如: double result; Double.TryParse ( "76", out result ); 我想要的是: Double.TryParse ( "76", out result ); 在那里我得到了一个新的变量,叫做result 有没有办法做到这一点(使用out或not)?没有,你必须先声明变量,因为你要将它传递给方法,唯一的区别是你明确要求方法在返回之前填写它。没有,你必须先声

基本上就像使用out关键字一样。但out关键字的问题在于,您仍然必须在方法调用之外声明一个变量,如:

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'关键字表示变量将通过'by reference'传递到函数中,函数需要(需要)设置变量的值

一般来说,应避免使用“out”参数;如果需要从函数中传递多个值,它们可能属于缺少的对象


编辑:在C#中,“out”参数与“ref”参数类似,因为它们都是参数,而不是更典型的按值调用参数。

变量位于堆栈上,而不是堆上,因此,调用函数来创建新变量的概念——虽然这是一个有趣的想法,在其他语言中并非不可能——意味着您不理解C#中变量和对象之间的区别

  • 变量的存储在堆栈上分配,并且变量只在声明变量的函数执行期间存在
这与“成员变量”不同,后者是属于对象的字段

C#中的'out'关键字表示变量将通过'by reference'传递到函数中,函数需要(需要)设置变量的值

一般来说,应避免使用“out”参数;如果需要从函数中传递多个值,它们可能属于缺少的对象


编辑:在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参数声明未使用的变量