Tag: pattern matching

模式匹配字符串

我想知道是否有办法在c#7中做这样的事情 var test = “aaeag”; switch (test) { case test.StartsWith(“a”): break; default: break; } 可悲的是,它看起来不太可能。 这是正确的还是我做错了什么?

模式匹配变量范围

在Roslyn模式匹配规范中,它指出: 模式变量的范围如下: 如果模式出现在if语句的条件中,则其作用域是if语句的条件和受控语句,而不是其else子句。 然而,最新的Microsoft“What’s new” post和演示文稿显示了这个例子: public void PrintStars(object o) { if (o is null) return; // constant pattern “null” if (!(o is int i)) return; // type pattern “int i” WriteLine(new string(‘*’, i)); } 其中显示模式匹配i变量在模式匹配的if级别范围之外使用。 这是一个疏忽,还是从规范中改变了范围?

在.Net 4.0中使用差的mans async / await构造实现异步超时

动机 C#5.0异步/等待构造非常棒,但遗憾的是,微软只展示了.NET 4.5和VS 2012的候选版本,这些技术将在我们的项目中得到广泛采用需要一些时间。 在Stephen Toub的异步方法,C#迭代器和任务中,我发现了一个可以很好地用于.NET 4.0的替代方法。 还有十几个其他实现甚至可以在.NET 2.0中使用该方法,尽管它们看起来很少过时且function较少。 例 所以现在我的.NET 4.0代码看起来像(注释部分显示它是如何在.NET 4.5中完成的): //private async Task ProcessMessageAsync() private IEnumerable ProcessMessageAsync() { //var udpReceiveResult = await udpClient.ReceiveAsync(); var task = Task .Factory .FromAsync(udpClient.BeginReceive, udpClient.EndReceive, null); yield return task; var udpReceiveResult = task.Result; //… blah blah blah if (message is BootstrapRequest) { var typedMessage = ((BootstrapRequest)(message)); // […]