关于返回类型是什么的明确解释,为什么无效是必要的

时间:2017-07-06 18:22:24

标签: c# methods return

我很遗憾地提出一个概念性的问题,但我很难想象回归一个价值的想法'从一种方法。我还是初学者,对此感到抱歉。

以此代码段为例:

List<User> users = api.getUsers();

注意它是如何返回一维字符串数组的,randomNamePossibilities [15]。此方法的目的是生成一个带有public static NameGenerator(string x) { Random r = new Random(); string[] randomNamePossibilities = new string[15] { "John", "Billy", "Tommy", "Kyle", "Jackson", "George", "Paco", "Sruy", "Mateus", "Matt", "Jared", "Sage", "Kai", "Trent", "Dillon" }; int randomNumberPicker = r.Next(15); return randomNamePossibilities[randomNumberPicker]; } (最大值为15)的随机数,然后该方法将这些随机化名称之一作为字符串从数组中返回。

我得到的错误是Random r&amp; NameGenerator()给我错误&#39;方法必须有一个返回类型&#39;和&#39;由于Person.NameGenerator(string)返回void,因此返回关键字后面不能跟一个对象表达式。 &#39;

所以我的问题是:在明确简单的术语中,返回在这样的方法中做什么?在什么情况下使用得当?如果我使用void,为什么这段代码会给我一个错误?我怎样才能重写这个功能呢?

5 个答案:

答案 0 :(得分:0)

返回值表示方法返回的值作为调用者的值。

这可以是一个值,一个引用,一个地址(带有不安全的代码)或根本没有。

想想这个简单的功能:

f(x) = m*x+n

当你在另一个环境中使用它时:

g(x) = f(x)*2+10^x

在这种情况下,f(x)将其自身的值返回到另一个函数中。

这与编程语言处理方法的方式相同(这也就是为什么它们通常被称为函数)。

但是如果您不想返回任何内容,则使用void表示没有给出返回值。

这并不意味着return关键字没有用。

无论方法在哪里,

return总是在调用方法时退出。

见这个例子:

public int Foo()
{
    int x = 0;
    return 2; //Exits the method
    return 0; //Will never be hit at all
}

你可以在void方法中使用return而不用任何值来退出任何给定位置的方法。

答案 1 :(得分:0)

返回类型就是:它指示您希望从方法返回的类型。

方法dir %ProjectDir%TypeScript\*.ts /b /s | findstr /v /i /g:%ProjectDir%TypeScript\strictFiles.txt > tsFiles.txt 的返回类型为string Hello() { return "Hello"; },并返回一个字符串。

您的方法声明:

string

缺少退货类型。编译器原谅你,因为它不会立即停止评估该方法中的代码,但C#中的类方法需要返回类型。

请注意,编译器首先注意到您缺少声明的返回类型(“Method必须具有返回类型”),然后假设您需要public static NameGenerator(string x) 方法。您不能void方法{{1>} {“因为Person.NameGenerator(字符串)返回void,返回关键字后面不能跟对象表达式”)。

如果想要从方法返回任何内容,则将其返回类型声明为return something;

void

您可以使用void关键字(过早地)退出方法,对于非void方法,您必须在此时返回一些内容。

要修复方法,您需要添加返回类型:

public void SayHello()
{ 
    Console.WriteLine("Hello"); 
}

现在,如果您的方法没有返回任何内容,但仍想从中返回,则只需使用return关键字:

return

在这里,public static string NameGenerator(string x) { // ... int randomNumberPicker = r.Next(15); return randomNamePossibilities[randomNumberPicker]; } 使得执行离开该方法。

答案 2 :(得分:0)

忽略示例中的代码,在方法声明中显式定义了返回类型。示例:

public int MethodName()
{
    int i = 1;
    return i;
}

为什么返回值很重要?

当您致电您的方法时(有时您不会),可以分配或比较返回值。例如:

if(MethodName() == 1)
{
    MessageBox.Show("The returned value from MethodName is 1");
}

另一个例子:

int i2 = MethodName(); //i2 is now equal to 1, since MethodName returns a value of 1

具有不同返回值的更多示例:

public string StringMethod()
{
    string s = "this is a string";
    return s;
}

public void MainMethod()
{
    string newString = StringMethod(); //newString is now equal to "this is a string" 
    if(StringMethod().Equals(newString))
    {
        //this code block will run, since both string are "this is a string"
    }
}

答案 3 :(得分:0)

您的方法缺少返回类型(此固定代码示例中的第一个&#39;字符串&#39;字)。

return指示运行时计算关键字&#39; return&#39;之后的值。然后停止执行该方法并返回到调用此方法的方法。当它是方法的最后一行时,它是多余的,这就是为什么有些语言根本不需要它,但它对于CSharp是必要的。

public static string NameGenerator(string x)
{
    Random r = new Random();
    string[] randomNamePossibilities = new string[15]
    {
        "John", "Billy", "Tommy", "Kyle", "Jackson", "George", "Paco",
        "Sruy", "Mateus", "Matt",
        "Jared", "Sage", "Kai", "Trent", "Dillon"
    };
    int randomNumberPicker = r.Next(15);
    return randomNamePossibilities[randomNumberPicker];
}

答案 4 :(得分:0)

您的代码段的主要问题是,您的方法signatur未定义返回类型。使用void然后您有一个方法,并且此方法不返回任何内容(并且正文中不允许return关键字。或者您定义返回类型,例如String,{{ 1}}等等,你有一个函数返回一些值/对象。(正文中需要int个关键字。)

您的方法签名应该类似于

return