Tag: C#的

线程安全的unit testing?

我已经写了一个类和许多unit testing,但是我没有使它安全。 现在,我想让类的线程安全,但为了certificate它并使用TDD,我想在重新开始之前编写一些失败的unit testing。 任何好办法做到这一点? 我的第一个想法是创build一对夫妇的线程,使他们都以不安全的方式使用这个类。 做足够多的线程足够多的时间,我一定会看到它断裂。

Lambda作为基类

和Lambdas一起玩,我发现了一个我不完全明白的有趣的行为。 Supose我有一个从2个模板参数派生的struct Overload ,并有一个using F1::operator(); 条款。 现在,如果我从两个函数派生,我只能访问F1的operator()(正如我所期望的) 如果我从两个Lambda函数派生出来,这不再是事实:我也可以从F2访问operator()。 #include <iostream> // I compiled with g++ (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8) // // g++ -Wall -std=c++11 -g main.cc // g++ -Wall -std=c++11 -DFUNCTOR -g main.cc // // or clang clang version 3.3 (tags/RELEASE_33/rc2) // // clang++ -Wall -std=c++11 -g main.cc // clang++ -Wall -std=c++11 -DFUNCTOR […]

“Include Directories”和“Additional Include Directories”之间的区别是什么?

在我的项目的configuration属性中,在“VC ++目录”下有一个“Include Directories”条目。 但是在“C / C ++”选项下,还有一个名为“Additional Include Directories”的条目。 图书馆目录也一样。 这两个条目有什么区别?

AsQueryable()的目的是什么?

AsQueryable()的目的只是为了让你可以将IEnumerable传递给可能期望IQueryable方法,还是有一个有用的理由将IEnumerable表示为IQueryable ? 例如,它应该是这样的情况: IEnumerable<Order> orders = orderRepo.GetAll(); // I don't want to create another method that works on IEnumerable, // so I convert it here. CountOrders(orders.AsQueryable()); public static int CountOrders(IQueryable<Order> ordersQuery) { return ordersQuery.Count(); } 还是它实际上使它做了不同的事情: IEnumerable<Order> orders = orderRepo.GetAll(); IQueryable<Order> ordersQuery = orders.AsQueryable(); IEnumerable<Order> filteredOrders = orders.Where(o => o.CustomerId == 3); IQueryable<Order> filteredOrdersQuery = […]

什么是在DLL中,它是如何工作的?

我总是在我的C#代码中引用DLL,但是我仍然想澄清一些问题。 这是关于DLL的问题的一个大脑转储。 我知道一个DLL是一个dynamic链接库,这意味着另一个程序可以在运行时访问这个库来获得“function”。 但是,考虑以下与Web.dll和Business.dll ASP.NET项目( Web.dll是前端function,它引用Business.dll的types和方法)。 Web.dll在什么时候dynamic链接到Business.dll ? 在使用Word(等等)的时候,你会注意到很多Windows硬盘抖动看起来很小的任务,而且我认为Word会closures,并且dynamic链接到其他DLL的function。 1A。 另外,什么加载和链接的DLL – 操作系统或一些运行时框架,如.NET框架? 1B。 什么是“连接”的过程? 是否进行兼容性检查? 加载到相同的内存? 链接究竟意味着什么? 什么实际上执行DLL中的代码? 它是由处理器执行还是在处理器理解DLL中的代码之前还有另外的翻译或编译阶段? 2A。 在使用C#.NET构buildDLL的情况下,直接运行.NET框架还是操作系统? Linux上的DLL是否可以在Windows系统上运行(如果存在这样的情况),还是他们在操作系统? DLL是特定于特定框架的吗? 使用C#.NET构build的DLL可以由使用Borland C ++构build的DLL使用吗? 4A。 如果4的答案是“否”,那么DLL的重点是什么? 为什么不是各种框架使用自己的格式链接文件? 例如:.NET中内置的.exe文件知道.abc文件types可以链接到代码中。 回到Web.dll / Business.dll例子 – 要获得一个类的客户,我需要从Web.dll引用Business.dll 。 这意味着Business.dll包含某种types的规范,即客户类实际上是什么。 如果我已经在Delphi中编译了我的Business.dll文件,那么C#会理解它,并且能够创build一个客户类,或者是否有某种标题信息或者某种表示“嗨,对不起,你只能使用我delphiDLL“? 5A。 同样适用于方法; 我可以在DLL中编写一个CreateInvoice()方法,用C ++编译它,然后从C#中访问并运行它? 什么停止或允许我这样做? 关于DLL劫持的问题,当然,replace(坏)DLL必须包含正在被劫持的方法签名和types。 我想这不会很难做,如果你能找出原始DLL中有什么方法可用。 6A。 什么在我的C#程序是决定我是否可以访问另一个DLL? 如果我的劫持DLL包含完全相同的方法和types的原始,但它是用另一种语言编译的,它会工作吗? 什么是DLL导入和DLL注册?

如何检查一个有效的Base64编码的string

在C#中有没有一种方法来查看一个string是否是Base 64编码,而不是仅仅试图转换它,看看是否有错误? 我有这样的代码: // Convert base64-encoded hash value into a byte array. byte[] HashBytes = Convert.FromBase64String(Value); 我想避免“Base-64string中的无效字符”exception,如果该值不是有效的base 64string。 我想检查并返回false而不是处理exception,因为我期望有时这个值不会是一个基本的64string。 使用Convert.FromBase64String函数之前有什么方法可以检查吗? 谢谢! 更新: 感谢您的所有答案。 这是一个你可以使用的扩展方法到目前为止,似乎确保你的string将传递Convert.FromBase64String没有例外。 .NET似乎忽略所有尾随空格,当转换为基地64,所以“1234”是有效的,所以是“1234” public static bool IsBase64String(this string s) { s = s.Trim(); return (s.Length % 4 == 0) && Regex.IsMatch(s, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None); } 对于那些想testingvs捕捉和exception性能的人来说,在大多数情况下,对于这个64位的东西来说,检查比捕捉exception要快,直到达到一定的长度。 长度越小,速度越快 在我非常不科学的testing中:对于字符长度为10万到11万次的10000次迭代,先testing快2.7倍。 对于1000个字符长度的迭代,1-16个字符对于总共16000个testing来说是10.9倍。 我相信有一个地方,用基于exception的方法进行testing会更好。 我只是不知道那是什么。

传统C / C ++项目中的死代码检测

你将如何去C / C ++代码中的死代码检测? 我有一个相当大的代码基地工作,至less10-15%是死代码。 有没有任何基于Unix的工具来识别这个领域? 有些代码还使用了很多预处理器,可以自动进行处理吗?

如何在开发过程中检测代码重复?

我们有一个相当大的代码库,C ++的400K LOC,代码重复是一个问题。 有什么工具可以有效地检测重复的代码块吗? 理想情况下,开发人员可以在开发过程中使用这些function,而不是偶尔运行以查看问题所在。 如果我们能够在CruiseControl中整合这样一个工具,并在每次登记后给出一个报告,那也不错。 我前段时间看了一下Duploc ,它显示了一个很好的graphics,但是需要一个小型的环境来使用它,这使得它自动运行起来相当困难。 免费工具会很好,但如果有一些好的商业工具,我也会感兴趣。

存在超载一元运算符的合理原因?

好吧,我已经受到启发,做一些头部冲刺 。 似乎超载operator&导致不less的痛苦。 什么合法的情况下超载呢? (不能说我曾经这样做过….)

如何判断是否放置了一个IDisposable对象引用?

有没有一种方法或其他一些轻量级的方法来检查引用是否是一个处置对象? 聚苯乙烯 – 这只是一个好奇(睡得好,不在生产代码)。 是的,我知道我可以在尝试访问对象的成员时捕获ObjectDisposedException 。