这是一个愚蠢的问题,但您可以使用这段代码来检查某项是否为特定类型…
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...
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))
是唯一的操作符(没有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...