这是一个愚蠢的问题,但您可以使用这段代码来检查某项是否为特定类型…

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...

当前回答

虽然这并不能避免圆括号的问题,但为了让人们通过谷歌到达这里,应该提到的是存在更新的语法(从c# 7开始),以使您的其余代码更干净:

if (!(DocumentPart is IContainer container)) { return; }
foreach(DocumentPart child in container.Children) {
    ...

这避免了双重强制转换、null检查以及在可能为空的作用域中使用变量。

其他回答

if(!(child is IContainer))

是唯一的操作符(没有IsNot操作符)。

你可以构建一个扩展方法:

public static bool IsA<T>(this object obj) {
    return obj is T;
}

然后用它来:

if (!child.IsA<IContainer>())

你可以继续你的主题:

public static bool IsNotAFreaking<T>(this object obj) {
    return !(obj is T);
}

if (child.IsNotAFreaking<IContainer>()) { // ...

更新(考虑OP的代码片段):

因为你实际上是在后面转换值,你可以用as代替:

public void Update(DocumentPart part) {
    part.Update();
    IContainer containerPart = part as IContainer;
    if(containerPart == null) return;
    foreach(DocumentPart child in containerPart.Children) { // omit the cast.
       //...etc...
if (child is IContainer ? false : true)

我要用这个

如果(!(对象是Car)){

}

c# 9(随.NET 5发布)包括逻辑模式and, or和not,这让我们可以更优雅地编写:

if (child is not IContainer) { ... }

同样,这个模式也可以用来检查null:

if (child is not null) { ... }

为什么不直接使用else ?

if (child is IContainer)
{
  //
}
else
{
  // Do what you want here
}

它的整洁,熟悉和简单?