前言 :我正在寻找一个解释,而不仅仅是一个解决scheme。 我已经知道解决scheme。 尽pipe花了几天的时间研究有关基于任务的asynchronous模式(TAP)的asynchronous和等待的MSDN文章,但我仍然对某些更精细的细节感到困惑。 我正在为Windowsapp store应用程序编写logging器,并且要支持asynchronous和同步logging。 asynchronous方法遵循TAP,同步的方法应该隐藏所有这些,并且像普通的方法一样工作。 这是asynchronouslogging的核心方法: private async Task WriteToLogAsync(string text) { StorageFolder folder = ApplicationData.Current.LocalFolder; StorageFile file = await folder.CreateFileAsync("log.log", CreationCollisionOption.OpenIfExists); await FileIO.AppendTextAsync(file, text, Windows.Storage.Streams.UnicodeEncoding.Utf8); } 现在相应的同步方法… 版本1 : private void WriteToLog(string text) { Task task = WriteToLogAsync(text); task.Wait(); } 这看起来是正确的,但它不起作用。 整个程序永远冻结。 版本2 : 嗯..也许任务没有开始? private void WriteToLog(string text) { Task task […]
有没有办法比较Linq2Sql中的2个DateTimevariables,而忽略时间部分。 应用程序将商品存储在数据库中,并添加发布的date。 我想保持确切的时间,但仍然能够靠date本身。 我想比较12/3/89 12:43:34和12/3/89 11:22:12并且不考虑一天中的实际时间,所以这两者都被认为是相同的。 我想我可以将所有的时间都设置为00:00:00,但是实际上我想知道一天的时间,我也只想按date进行比较。 我发现一些代码有相同的问题,他们分别比较年,月和日。 有一个更好的方法吗?
请向我解释静态构造函数的用法。 为什么和什么时候我们会创build一个静态构造函数,并有可能超载一个?
我们的testing机器上有一个非常奇怪的错误。 错误是: System.TypeLoadException: Method 'SetShort' in type 'DummyItem' from assembly 'ActiveViewers (…)' does not have an implementation. 我只是不明白为什么。 SetShort存在于DummyItem类中,我甚至重新编译了一个写入事件日志的版本,以确保它不是部署/版本问题。 奇怪的是,调用代码甚至没有调用SetShort方法。
通常我想检查提供的值是否与列表中的值匹配(例如,validation时): if (!acceptedValues.Any(v => v == someValue)) { // exception logic } 最近,我注意到ReSharper要求我简化这些查询: if (acceptedValues.All(v => v != someValue)) { // exception logic } 显然,这在逻辑上是相同的,也许稍微有点可读性(如果你已经做了很多的math),我的问题是:这是否会导致性能下降? 它感觉就像应该(即.Any()听起来像短路,而.All()听起来像不),但我没有什么证实这一点。 有没有人对这些疑问是否能解决问题有更深入的了解,或者ReSharper是否把我引入歧途?
我正在尝试使用C#4.0编译我的Excel插件,并开始在Visual Studio中构build项目时遇到此问题。 重要的是告诉你我之前没有遇到过这个问题。 什么可能导致这种情况发生?
环境:Visual Studio 2015 RTM。 (我没有尝试旧版本。) 最近,我一直在debugging一些Noda Time代码,我注意到当我有一个types为NodaTime.Instant的本地variables(Noda Time中的一个中心structtypes)时,“Locals”和“监视”窗口似乎不会调用其ToString()覆盖。 如果我在监视窗口中显式地调用ToString() ,我会看到适当的表示,但是我只看到: variableName {NodaTime.Instant} 这不是很有用。 如果我改变override来返回一个常量string,那么这个string就会显示在debugging器中,所以很明显它能够提取它的存在 – 它只是不想在“normal”状态下使用它。 我决定在一个小小的演示应用程序中重现这一点,下面是我想到的。 (请注意,在这篇文章的早期版本中, DemoStruct是一个类, DemoStruct根本不存在 – 我的错,但它解释了一些现在看起来很奇怪的评论…) using System; using System.Diagnostics; using System.Threading; public struct DemoStruct { public string Name { get; } public DemoStruct(string name) { Name = name; } public override string ToString() { Thread.Sleep(1000); // Vary this […]
换句话说,这个Singleton实现是否是线程安全的: public class Singleton { private static Singleton instance; private Singleton() { } static Singleton() { instance = new Singleton(); } public static Singleton Instance { get { return instance; } } }
我可以看到为什么C ++ 11中的autotypes提高了正确性和可维护性。 我读过,它也可以提高性能( 几乎总是自动通过香草萨特),但我想念一个很好的解释。 auto如何提高性能? 任何人都可以举个例子吗?
是否有可能使用break函数来退出几个嵌套for循环? 如果是这样,你会怎么做呢? 你还可以控制中断退出多less循环?