从另一个类的if语句返回一个字符串

时间:2016-04-15 21:32:13

标签: c#

我的代码在我的公共静态字符串ValidateCreditScore(int creditscore,string status)中返回一个错误,即一个名为" status"的本地或参数。无法在此范围内声明,因为该名称在封闭的本地范围中用于定义本地或参数。

基本上我只想返回那个语句,这样我就可以把它放在我的占位符中,它表示" {0}是{1},applicantName,applicant.status。 我希望声明说出这个名字,并说明信用评分是否可以接受。

我的问题是,我甚至需要我的公共静态字符串ValidateCreditScore(int creditscore,string status)中的字符串状态,因为我已经将信用评分传递给它了吗?还是我需要它,因为我要回来......

using System;

public class MortgageApplication
{
public static void Main(string[] args)
{
    int creditScore = 0;
    string applicantName = "";
    char userInput = 'n';
    string status = "";

    Console.WriteLine("** CSCC Mortgage Company **");
    Console.Write("\nWould you like to run this program [y, n]? ");
    userInput = Convert.ToChar(Console.ReadLine());

    while (!(userInput == 'n'))
    {
        Console.Write("Please enter the applicant's name: ");
        applicantName = Console.ReadLine();
        Console.Write("Enter credit score: ");
        creditScore = Convert.ToInt32(Console.ReadLine());

        try
        {
            Applicant applicant = new Applicant(applicantName, creditScore, status);
            Console.WriteLine("{0} is {1}", applicantName,applicant.status);
        }

        catch (ArgumentException anyException)
        {
            Console.WriteLine(anyException.Message);
        }

        Console.Write("Would you like to run this program [y, n]? ");
        userInput = Convert.ToChar(Console.ReadLine());

    }

    Console.WriteLine("Please press the <enter> key to terminate the program.");
    Console.ReadLine();
}
}

public class Applicant
{
public Applicant(string name, int creditscore, string status)
{
    Name = name;
    CreditScore = creditscore;
    status = ValidateCreditScore(creditscore, status);
}

public string Name { get; private set; }
public double CreditScore { get; private set; }
public string status { get; private set; }

public static string ValidateCreditScore(int creditscore, string status)
{
    try
    {
        if (creditscore <= 299 && creditscore >= 851)
        {

            throw new ArgumentException("Value does not fall within the expected range.");

        }

        if (creditscore <= 649)
        {
            string status = Convert.ToString("not accepted");
            return status;
        }

        if (creditscore >=650 )
        {
            string status = Convert.ToString("accepted");
            return status;
        }

    }

    catch (ArgumentException anyException)
    {
        Console.WriteLine(anyException.Message);

    }
    return "Not Accepted";
}
}

3 个答案:

答案 0 :(得分:0)

您收到错误,因为传递到ValidateCreditScore的其中一个变量名为“status”

public static string ValidateCreditScore(int creditscore, string status)

然后你尝试在以后创建另一个具有相同名称的变量:

if (creditscore <= 649)
{
    string status = Convert.ToString("not accepted");
    return status;
}

将其中一个变量重命名为其他变量,它应该有效。

此外,不需要Convert.ToString(),并且在返回之前不需要将字符串存储在变量中。所以上面的行变成了

if(creditscore <= 649)
{
   return "not accepted";
}

最后,看起来传递给ValidateCreditScore的状态甚至没有在函数中使用,所以你可以摆脱它。

答案 1 :(得分:0)

您收到此错误是因为您将一个名为status的变量传递给您的方法,但之后您还尝试声明一个具有相同名称的变量。您甚至不需要在方法中声明变量,您可以像这样重写代码:

    if (creditscore <= 649)
    {
        return "not accepted";
    }

    if (creditscore >=650 )
    {
        return "accepted";
    }

答案 2 :(得分:0)

您的方法ValidateCreditScore中不需要status参数。 只需返回字符串而不必使用如下变量: ...

return Convert.ToString("accepted");

return Convert.ToString("not accepted");

因此,请删除方法中的该参数并修复构建错误。