我该如何解决这个问题? (最后的文字“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");
}
}
}
答案 0 :(得分:2)
您只能从方法中获得一个返回类型;所有return
陈述都必须尊重它。返回类型可以是一个对象,一种返回"多个"事情:How can I return multiple values from a function in C#?
所以你不能写出你想要的东西;至少不是直接的。您可以返回int
,string
或包含两者的对象。
你当前的代码无论如何都是胡说八道;当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,那么使用此最终选项可能会更简单。