Tag: .net 4.5

当提供的字符串不为null时,string.IsNullOrEmpty返回true

我有一个unit testing,调用传递字符串的对象上的方法。 被调用方法的第一件事就是检查字符串是否为null或为空。 但是,无论filePath的值是什么,对string.IsNullOrEmpty的调用都为true。 见下图。 我在这里错过了什么吗? 编辑: 检查null和string.Empty分别按预期工作: 编辑2: 我已经清理了解决方案,通过文件系统删除了bin目录,并且在重建之后,调试器显示应该抛出ArgumentNullException,尽管它实际上没有被抛出 。

Selenium因Chrome版本32.0.1700.72 m而失败

Chrome今天早上(2014年8月1日)为我自动更新为“版本32.0.1700.72 m”,现在我的所有自动化测试都无法运行 – 它们失败并出现“System.InvalidOperationException:System.InvalidOperationException:unknown error:无法几乎立即发现打开的页面。 我在跑: Windows 7企业版(SP1)64位 Chrome版本32.0.1700.72 m Selenium ChromeDriver v2.2 .NET C# 这是我得到的控制台输出: Starting ChromeDriver (v2.2) on port 26819 [8668:8300:0108/162344:ERROR:chrome_views_delegate.cc(176)] NOT IMPLEMENTED [8668:8300:0108/162344:ERROR:desktop_root_window_host_win.cc(746)] NOT IMPLEMENTED [8668:8300:0108/162345:ERROR:desktop_root_window_host_win.cc(746)] NOT IMPLEMENTED 这是我得到的例外: Class Initialization method LeadManager.Web.UITest.Tests.ViewLeads.PriorityModeTests.ClassInitialize threw exception. System.InvalidOperationException: System.InvalidOperationException: unknown error: unable to discover open pages (Driver info: chromedriver=2.2,platform=Windows NT 6.1 SP1 x86_64). at […]

使用IReadOnlyCollection 而不是IEnumerable 来获取参数,以避免可能的多次枚举

我的问题与关于使用IEnumerable vs IReadOnlyCollection 。 我也总是使用IEnumerable将集合作为返回类型和参数公开,因为它既可以是不可变的又是懒惰的执行。 但是,我越来越关注我的代码中的地方的扩散,我必须枚举一个参数,以避免ReSharper给出的可能的多个枚举警告。 我理解为什么ReSharper建议这一点,我同意它建议的代码(下面)以确保封装(即,没有关于调用者的假设)。 Foo[] arr = col as Foo[] ?? col.ToArray(); 但是,我发现此代码的重复性是污染性的,并且我同意一些消息来源IReadOnlyCollection是一个更好的选择,特别是本文中提出的观点,其中指出: 最近,我一直在考虑返回IEnumerable的优点和缺点。 从好的方面来说,它与接口得到的一样小,所以它让你作为方法作者更灵活,而不是像IList或( 天堂禁止 )一个更重的替代方案。 但是,正如我在上一篇文章中所概述的那样, IEnumerable返回会诱使调用者违反Liskov替换原则 。 他们很容易使用像Last()和Count()这样的LINQ扩展方法,其语义IEnumerable不承诺。 我们需要的是一种更好的方法来锁定一个返回的集合,而不会让这样的诱惑如此突出。 (我想起Barney Fife艰难地学习这一课。) 输入IReadOnlyCollection ,.NET 4.5中的新增function。 它只向IEnumerable添加一个属性: Count属性。 通过承诺计数,你向你的呼叫者保证你的IEnumerable确实有一个终点。 然后他们可以清楚地使用像Last()这样的LINQ扩展方法。 但是,正如观察者可能已经注意到的那样,本文仅讨论如何将IReadOnlyCollection用于返回类型。 我的问题是,相同的论点同样适用于将其用于参数吗? 对此的任何理论思考或评论也将受到赞赏。 事实上,我正在考虑使用IReadOnlyCollection的一般经验法则是,如果使用IEnumerable可能会有多次枚举(相对于ReSharper警告)。 否则,使用IEnumerable 。

在HttpClient中设置HTTP协议版本

我需要向使用HTTP版本1.0的Web服务发出请求。 我使用HttpClient ,但我无法看到任何设置HTTP版本的选项。 我在哪里可以设置请求版本?

找不到类型或命名空间名称“System”

在Visual Studio 2015 Professional中打开我的项目时,我的所有视图(* .cshtml)中都存在以下错误(以及更多错误)。 错误CS0246找不到类型或命名空间名称’System’(您是否缺少using指令或程序集引用?)严重性代码描述项目文件行 错误CS0518未定义或导入预定义类型“System.Object”严重性代码描述项目文件行 错误CS0518未定义或导入预定义类型“System.String” 我得到了这些参考: False N:\XXX\Sitecore.Kernel.dll N:\XXX\Sitecore.Mvc.dll False N:\XXX\System.Web.Helpers.dll False N:\XXX\System.Web.Mvc.dll N:\XXX\System.Web.Providers.dll False N:\XXX\System.Web.Razor.dll False N:\XXX\System.Web.WebPages.dll False N:\XXX\System.Web.WebPages.Deployment.dll False N:\XXX\System.Web.WebPages.Razor.dll 我找到了一些解决方案,说没有引用mscorlib ..但是当我尝试添加它时,它说它已经存在(即使我没有在csproj文件中看到它)。 System.dll参考: 解: 管理问题..我将构建路径设置为“c:… \ bin”而不是“\ bin”。 我相信这是因为我在项目的根目录中没有任何web.config,因此VS没有将我的项目识别为Web项目。

使用工作线程对项目进行排队

我一直试图找出如何解决我的要求,但对于我的生活,我只是无法想出一个解决方案。 我有一个项目数据库,它们存储一种队列。 (数据库已经实现,其他进程将向此队列添加项目。) 这些项目需要大量的工作/时间来“处理”,所以我需要能够:不断地从数据库中排队项目。 对于每个项目运行一个新线程并处理该项目,然后返回true / false它已成功处理。 (这将用于将其重新添加到数据库队列中) 但是,只有当前活动线程数(每个项目正在处理一个)小于最大线程数参数时才执行此操作。 一旦达到最大线程数,我需要停止从数据库中对项目进行排队,直到当前线程数小于最大线程数。 此时它需要继续对项目进行排队。 感觉这应该是我能想到的东西,但它不是来找我。 澄清一下:我只需要实现线程。 该数据库已经实施。

静态初始化程序中的Task.Run

请考虑以下代码。 static class X { public static int Value = Task.Run(() => 0).Result; } class Program { static void Main(string[] args) { var value = X.Value; } } 调用Task.Run然后在静态初始值设定项中导致程序永久冻结。 为什么?

C#.NET 4.5中的JavaScript解析器和分析器

不确定标题是否正确解释。 无论如何,我正在构建一个.NET WPF应用程序,该应用程序应该通过JavaScript并识别诸如此类的问题 如果定义的变量在结尾处无效 如果正在使用try / catch / finally块。 函数调用 我在这里完成了围绕c / c ++的问题。 现在我后悔掩盖我的编译器类。 我想知道如何在C#中validation1-3点。 那里有哪个图书馆呢?

SQLite与VS2012和.NET 4.5 – 任何CPU构建

我已经尝试查看相关问题的答案,但没有找到任何不是几年的东西(不确定它们是否仍然是首选答案)或完全回答我的问题。 要求: 我正在开发一个在32位和64位计算机上运行的C#应用​​程序。 我的客户端不想基于x86和x64创建两个不同的版本。 我们使用的是SQLite,VS2012和.NET 4.5。 以下是SQLite的可用DLL: http : //system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki 不幸的是,DLL分为32位或64位版本。 问题: 是否可以包含两个DLL并根据处理器切换它们? 我该怎么做呢? 我已经阅读了一些关于GAC的内容,从我读过的内容来看,它是一个本地解决方案。 要为我的应用程序实现这一点,我必须在每次安装时将DLL安装到GAC,对吗? 我是否可以强制程序在64位环境中以32位模式运行,从而失去64位优势但能够在两个环境中运行我的程序而没有问题? 我不确定的一些可能的答案对我的情况有用: 查看最新的答案(第三个下来): 64位SQLite.dll和任何CPU 2012年的答案似乎很有希望,但对该答案的第一个评论破坏了我的希望: 在32位和64位C#世界中使用System.Data.SQLite的选项

IL中的属性getter / setter的方法命名是否标准化?

我有以下两种方法,我想知道它们是否合适: public bool IsGetter(MethodInfo method) { return method.IsSpecialName && method.Name.StartsWith(“get_”, StringComparison.Ordinal); } public bool IsSetter(MethodInfo method) { return method.IsSpecialName && method.Name.StartsWith(“set_”, StringComparison.Ordinal); } 虽然这段代码有效,但我希望避免检查StartsWith并以编程方式获取命名约定的部分。 基本上,是否有任何.NET 4.5类能够看到MethodInfo是属性getter / setter?