首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#操作符?并抛出异常

C#操作符?并抛出异常
EN

Stack Overflow用户
提问于 2017-02-14 00:42:29
回答 4查看 4K关注 0票数 3

我有以下代码:

代码语言:javascript
运行
复制
public int Number(int x)
{
    return x > 0 ? x : throw new Exception();
}

目标非常简单,使用运算符“?”我想检查一些值,如果它满足条件,返回那个值,如果不满足,就抛出一些错误。但是VS Intellisense说:表达式术语抛出无效;我是否被迫使用其他运算符?

附注:我猜它和return throw new Exception();是一样的,但还是想确认一下。

EN

回答 4

Stack Overflow用户

发布于 2017-02-14 01:27:10

在C# 7.0之前,如果您想从表达式体中抛出异常,则必须:

代码语言:javascript
运行
复制
return x > 0 ? x : new Func<int>(() => { throw new Exception(); })();

在C# 7.0中,上述操作现已简化为:

代码语言:javascript
运行
复制
return x > 0 ? x : throw new Exception();
票数 8
EN

Stack Overflow用户

发布于 2017-02-14 00:44:10

改为这样写:

代码语言:javascript
运行
复制
public int Number(int x)
{
    if(x <= 0) throw new Exception();
    return x;
}

条件运算符需要返回一个公共基类型,但intException没有。特别是,抛出一些东西并不等同于返回一些东西,所以即使你的方法会返回一个Exception (这很奇怪),这也是不可能的。

来自MSDN

first_expression和second_expression的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。

票数 7
EN

Stack Overflow用户

发布于 2017-02-14 00:46:15

您可以在C# 7中做到这一点。您的方法可以进一步简化为:

代码语言:javascript
运行
复制
public int Number(int x) => x > 0 ? x : throw new Exception();
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42209135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档