Var模式在C#7中的应用

Var模式在C#7中的应用,c#,pattern-matching,C#,Pattern Matching,我在新的C#7中看到了这个var模式的例子 只是使用有什么不同: var x = o; Console.WriteLine($"it's a var pattern with the type {x?.GetType()?.Name}"); 当这个模式是一个有用的解决方案时。正如所问的问题,var模式的一个用法是when is use switch语句,如下所示: string s = null; var collection = new string[] { "abb", "abd", "a

我在新的C#7中看到了这个var模式的例子

只是使用有什么不同:

var x = o;
Console.WriteLine($"it's a var pattern with the type {x?.GetType()?.Name}");
当这个模式是一个有用的解决方案时。

正如所问的问题,var模式的一个用法是when is use switch语句,如下所示:

string s = null;
var collection = new string[] { "abb", "abd", "abc", null};
switch (s)
{
    case "xyz":
        Console.WriteLine("Is xyz");
        break;

    case var ss when (collection).Contains(s):
        Console.WriteLine("Is in list");
        break;

    default:
        Console.WriteLine("Failed!");
        break;

}

正如他在回答中所说的那样。

在这个例子中没有实际的区别。不幸的是,有这么多的网站甚至都使用了这种方式

如果在布尔表达式中需要临时变量,那么使用
x的主要原因是var y
模式。例如:

allLists.Where(list => list.Count() is var count && count >= min && count <= max)

allLists.Where(list=>list.Count()是var Count&&Count>=min&&Count区别在于一个是有条件的
WriteLine
,另一个不是。我正在尝试思考此模式的有用用法(我看不到)或者如果是语言故障。另一种可能是
var
实际上可能是一种类型,尽管这会很可怕。@GeorgeStocker我不明白如果条件始终为真,为什么要使用if语句。文档问题已经解决。
allLists.Where(list => list.Count() is var count && count >= min && count <= max)