我目前正在使用 v4.6.2 开发一个 C# 项目,而 Visual Studio 刚刚建议对以下代码进行代码更改。
我的问题是,我从未见过使用 is
关键字以这种方式创建新的变量实例。
原代码为:
var authInfo = inputs.FirstOrDefault(i =>
typeof(SoapAuthenticationBase).IsAssignableFrom(i.GetType()));
if (authInfo is SoapAuthenticationBase)
Visual Studio 2017 建议:
if (inputs.FirstOrDefault(i =>
typeof(SoapAuthBase).IsAssignableFrom(i.GetType()))
is SoapAuthBase authenticationContract)
我查看了 Microsoft 关于 'is' keyword 的文档并没有发现任何可以解释这种语法的东西。
以这种方式“添加”了哪个版本的 C#?
最佳答案
此功能称为模式匹配,它是在版本 7 的 c# 语言中引入的。在您的示例中它不是很清楚,但请考虑以下 Equals
的规范示例> 覆盖:
public override bool Equals(obj other)
{
if (obj is Foo)
{
return Equals((Foo)obj);
}
return false;
}
这实际上是一种浪费,因为您要检查类型两次:一次是查看它是否实际上是一个 Foo
,然后在执行转换时再次检查。这似乎不必要地冗长。
模式匹配允许更简洁的语法:
public override bool Equals(obj other)
{
if (obj is Foo foo)
{
return Equals(foo);
}
return false;
}
您可以阅读有关此功能的更多信息 here .
关于c# - C#中使用is关键字声明变量内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49365744/