返回字符串而不是整数

时间:2018-06-06 20:27:07

标签: c# string integer return

我该如何解决这个问题? (最后的文字“brah我已经告诉过......)。程序想要我给一个int回来,但我想给一个字符串回来。我怎么能解决这个问题呢?因为我告诉过它它将是一个返回的int,但我希望有这个失败的消息。非常感谢你们!

编辑问题的确是,程序因为而无法编译 否则返回Console.WriteLine("brah I've told ya that I want more than 5"); 因为我的程序想要一个int,没有字符串。

static void Main(string[] args)
{
    Console.WriteLine("Give me a number over 5 bro");
    int x = int.Parse(Console.ReadLine());

    int result = AddNumbers(x, 5);
    Console.WriteLine(result);

    Console.WriteLine("Press enter to close...");
    Console.ReadLine();
}

public static int AddNumbers(int number1, int number2)
{
    int result = number1 + number2;

    if (result > 10)
    {
        return result;
    }
    else return Console.WriteLine("brah I've told ya that I want more than 5");
}
}
}

5 个答案:

答案 0 :(得分:2)

您只能从方法中获得一个返回类型;所有return陈述都必须尊重它。返回类型可以是一个对象,一种返回"多个"事情:How can I return multiple values from a function in C#?

所以你不能写出你想要的东西;至少不是直接的。您可以返回intstring或包含两者的对象。

你当前的代码无论如何都是胡说八道;当Console.WriteLine返回void时。您无法返回void(作为值,您可以作为返回类型)。

答案 1 :(得分:0)

所以在c#如何作为编程语言的复合体中工作,你不能让方法签名返回一个int然后返回一个字符串。现在,从逻辑角度考虑这一点,这是一个错误。用户没有输入超过5的数字,因此抛出异常并抓住它。以下是你将如何做到这一点。

select
CASE T1.process_code
  when (select T3.OPTIONAL_CODE as Tax_Code
        from GEN_LED_VOUCHER_ROW_UNION_QRY T3
        where T3.voucher_no = ('2018001625')
    and ACCOUNTING_YEAR = 2018 
    and ACCOUNTING_PERIOD = '5'
    and ACCOUNT like '3%') = 'N2' 
  THEN (select T4.OPTIONAL_CODE as Tax_Code
        from GEN_LED_VOUCHER_ROW_UNION_QRY T4
        where T4.voucher_no = ('2018001625')
    and ACCOUNTING_YEAR = 2018 
    and ACCOUNTING_PERIOD = '5' 
    and ACCOUNT like '3%')
  ELSE 'HEllo'
  END process_code
from  lora1app.GEN_LED_VOUCHER_ROW_UNION_QRY T1,

答案 2 :(得分:-1)

只需返回一个字符串

public static string AddNumbers(int number1, int number2)
{
    int result = number1 + number2;

    if (result > 10)
    {
        return result.ToString();
    }
    else
    { 
        return "brah I've told ya that I want more than 5";
    }  
}

答案 3 :(得分:-1)

最简单和最合乎逻辑的方法是将AddNumbers方法的返回类型保持为有意义的整数,并且在写入控制台后默认返回0 ,如下所示:

   if (result > 10)
        {
            return result;
        }
        else
        {
        Console.WriteLine("brah I've told ya that I want more than 5");
        return 0;
        }

或者将返回类型更改为Int32?这允许你通过这样做返回null:

public static Int32? AddNumbers(int number1, int number2)
    {
        int result = number1 + number2;
    if (result > 10)
    {
        return result;
    }
    else
    {
    Console.WriteLine("brah I've told ya that I want more than 5");
    return null;
    }
}

并且不要忘记变量类型:

Int32? result = AddNumbers(x, 5);

还要确保检查result是否为0或null以更改生成的写信线。

这不是问题所在,但你可以继续询问用户,直到他们输入正确的内容:

static void Main(string[] args)
    {
        Int32? result = null;
        while (result is null)
        {
            Console.WriteLine("Give me a number over 5 bro");
            int x = int.Parse(Console.ReadLine());
            Int32? result = AddNumbers(x, 5);
            if (result is null) continue;

            Console.WriteLine(result);
            Console.WriteLine("Press enter to close...");
            Console.ReadLine();
        }

    }

答案 4 :(得分:-5)

实现整体尝试的更好方法是使用异常。考虑一下我们是否写了AddNumbers:

public static int AddNumbers(int number1, int number2)
{
    int result = number1 + number2;
    if(result <= 10)
    {
        throw new Exception("Should be more than 10");
    }
    return result;
}

和我们的主要逻辑:

    try
    {
        int result = AddNumbers(3, 3);
    }catch(Exception e)
    {
        Console.WriteLine(e.Message); // must've been > 10
        return; 
    }

这种方法的工作方式是,当AddNumbers遇到不期望或不允许的行为时,它将抛出异常。当我们调用AddNumbers时,我们必须在try-catch块中执行它以便捕获此异常(如果它被抛出)。这种方法比使用元组更清晰,更简单,在这种情况下,元组基本上重新发明了轮子。

因此,如果我们的数字加到少于10,AddNumbers将抛出一个异常,然后在我们的主逻辑中捕获并记录到控制台,打印“应该超过10”。

另一个选项是将主逻辑更改为:

    int result = AddNumbers(x, 5);

    if(result > 10)
    {
        Console.WriteLine(result);
    }
    else
    {
        Console.WriteLine("You should have given me more than 5!");
    }

这样做的优点是更简单,但缺点是我们必须记住每次使用AddNumbers时都包含这个if语句。如果我们想要添加更多检查,Exception路由是更好的设计,例如,如果您还希望结果小于30,可被2整除等,您可以继续添加新的抛出异常。但是,如果您只需要检查结果是否大于10,那么使用此最终选项可能会更简单。