- 类型检查
- 模式匹配(`Pattern Matching`)
- 模式匹配的类型模式
- 与 `as` 的区别
- 性能注意事项
- 总结
在
C#
中,
is
关键字有多种用途,主要用于
类型检查和
模式匹配。以下是
is
关键字的主要用法:
类型检查
is
关键字可以用来检查一个对象是否兼容于指定的类型,或者是否实现了指定的接口。如果检查结果为真,则返回 true
。
- 示例:
object obj = "Hello, World!";if (obj is string)
{Console.WriteLine("obj 是一个字符串类型");
}
else
{Console.WriteLine("obj 不是字符串类型");
}
在上面的例子中,obj is string
检查 obj
是否可以被转换为 string
类型。
模式匹配(Pattern Matching
)
从C# 7.0
开始,is
关键字支持模式匹配。模式匹配允许你在检查类型的同时,将对象的值赋给一个新变量,以便进一步使用。
- 示例:
if (obj is string str)
{Console.WriteLine($"obj 是一个字符串,内容为:{str.ToUpper()}"); // 使用 str 变量
}
在上面的例子中,obj is string str
不仅检查 obj 是否是 string 类型,还将 obj
的值赋给变量 str
,方便后续使用。
模式匹配的类型模式
is
关键字支持多种模式,包括类型模式、常量模式、逻辑模式等。
- 类型模式:
if (obj is string)
{Console.WriteLine("obj 是字符串类型");
}
- 常量模式:
if (obj is null)
{Console.WriteLine("obj 是 null");
}
- 逻辑模式(
C# 9.0
及以上):
if (obj is string str && str.Length > 5)
{Console.WriteLine($"obj 是一个长度大于5的字符串:{str}");
}
与 as
的区别
is
关键字主要用于类型检查,返回一个布尔值(true
或 false
)。
as
关键字用于类型转换,返回目标类型的对象,如果转换失败则返回 null
。
- 示例:
object obj = "Hello";// 使用 is 检查类型
if (obj is string)
{Console.WriteLine("obj 是字符串类型");
}// 使用 as 进行类型转换
string str = obj as string;
if (str != null)
{Console.WriteLine($"obj 转换为字符串后的内容是:{str}");
}
性能注意事项
is
关键字在类型检查时会进行运行时类型检查,因此可能会有性能开销。
如果只需要类型转换而不需要检查类型,建议使用 as
。
总结
is
关键字在C#
中是一个非常强大的工具,不仅可以用于类型检查,还可以结合模式匹配实现更复杂的逻辑。根据你的需求选择合适的用法即可。