Hug*_*are 263 c# casting keyword
这是一个愚蠢的问题,但您可以使用此代码来检查某些内容是否属于特定类型...
if (child is IContainer) { //....
Run Code Online (Sandbox Code Playgroud)
是否有更优雅的方法来检查"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) {
Run Code Online (Sandbox Code Playgroud)
是的,是的......愚蠢的问题....
因为对代码的外观存在一些疑问,所以它只是在方法开始时的简单返回.
public void Update(DocumentPart part) {
part.Update();
if (!(DocumentPart is IContainer)) { return; }
foreach(DocumentPart child in ((IContainer)part).Children) {
//...etc...
Run Code Online (Sandbox Code Playgroud)
Meh*_*ari 283
if(!(child is IContainer))
Run Code Online (Sandbox Code Playgroud)
是唯一的运营商(没有IsNot运营商).
您可以构建一个执行它的扩展方法:
public static bool IsA<T>(this object obj) {
return obj is T;
}
Run Code Online (Sandbox Code Playgroud)
然后用它来:
if (!child.IsA<IContainer>())
Run Code Online (Sandbox Code Playgroud)
你可以按照你的主题:
public static bool IsNotAFreaking<T>(this object obj) {
return !(obj is T);
}
if (child.IsNotAFreaking<IContainer>()) { // ...
Run Code Online (Sandbox Code Playgroud)
由于您实际上是在实际投射该值后,您可以使用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...
Run Code Online (Sandbox Code Playgroud)
cjk*_*cjk 107
你可以这样做:
object a = new StreamWriter("c:\\temp\\test.txt");
if (a is TextReader == false)
{
Console.WriteLine("failed");
}
Run Code Online (Sandbox Code Playgroud)
Tod*_*ton 35
这个还没有提到。它有效,我认为它看起来比使用更好!(child is IContainer)
if (part is IContainer is false)
{
return;
}
Run Code Online (Sandbox Code Playgroud)
https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/#logical-patterns
if (part is not IContainer)
{
return;
}
Run Code Online (Sandbox Code Playgroud)
Tho*_*sen 14
C# 9(与 .NET 5 一起发布)包括逻辑模式and,or和not,这使我们可以更优雅地编写它:
if (child is not IContainer) { ... }
Run Code Online (Sandbox Code Playgroud)
同样,此模式可用于检查 null:
if (child is not null) { ... }
Run Code Online (Sandbox Code Playgroud)
Mar*_*rst 12
为什么不用别的呢?
if (child is IContainer)
{
//
}
else
{
// Do what you want here
}
Run Code Online (Sandbox Code Playgroud)
它整洁熟悉而简单?
您拥有它的方式很好,但您可以创建一组扩展方法,以"更优雅地检查'NOT'实例."
public static bool Is<T>(this object myObject)
{
return (myObject is T);
}
public static bool IsNot<T>(this object myObject)
{
return !(myObject is T);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以写:
if (child.IsNot<IContainer>())
{
// child is not an IContainer
}
Run Code Online (Sandbox Code Playgroud)
丑陋?我不同意。唯一的其他方式(我个人认为这是“更丑陋的”):
var obj = child as IContainer;
if(obj == null)
{
//child "aint" IContainer
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82249 次 |
| 最近记录: |