【发布时间】:2020-05-28 22:25:31
【问题描述】:
这是一个愚蠢的问题,但是您可以使用此代码来检查某物是否属于特定类型...
if (child is IContainer) { //....
有没有更优雅的方法来检查“NOT”实例?
if (!(child is IContainer)) { //A little ugly... silly, yes I know...
//these don't work :)
if (child !is IContainer) {
if (child isnt IContainer) {
if (child aint IContainer) {
if (child isnotafreaking IContainer) {
是的,是的……愚蠢的问题……
因为对代码的外观有一些疑问,所以它只是在方法开始时的简单返回。
public void Update(DocumentPart part) {
part.Update();
if (!(DocumentPart is IContainer)) { return; }
foreach(DocumentPart child in ((IContainer)part).Children) {
//...etc...
【问题讨论】:
-
我个人喜欢“child isnotafreaking ...”。我投票决定将该关键字放入 C# 5
-
我很想知道你会使用这个的情况吗?这段代码的“else”部分是什么样的,你不能只反转测试吗?如果您的代码说“如果 child 不是 IContainer 则抛出异常”或“如果 child 不是 IContainer 那么它可能是 IFoo 所以我接下来会尝试”,那么那里没有隐含的 else 语句吗?我可能错过了什么。
-
@MartinPeck,可能没有 else 子句。这就是我搜索这个的原因。
-
@MartinPeck 这是一个示例:
if (!(argument is MapsControlViewModel vm)) { return; }- 我可以反转 if 并将方法的其余部分放在 if 的括号内,但是我会得到圣诞树代码,有很多方法末尾的右括号。那可读性要差得多。 -
也许我们一般需要的是
ifnot语句