Tag: C#的

为什么clang的stdbool.h包含#define false false

在被编译器错误指向之后,我注意到了clang的stdbool.h文件包含(除其他外)以下几行: #define bool bool #define false false #define true true 它们包含在一个#ifdef块中,间接强制__cplusplus ,因此即使stdbool.h是C头,也是c ++标签。 这些定义需要什么? 我想他们是需要一些预处理器相关的原因,但我有兴趣知道标准的哪个部分或哪个技术原因使得它铿锵必须包括这些。

为什么IEnumerator <T>从IDisposableinheritance,而非genericsIEnumerator没有?

我注意到genericsIEnumerator<T>从IDisposableinheritance,但非generics接口IEnumerator不。 为什么这样devise? 通常,我们使用foreach语句来通过一个IEnumerator<T>实例。 foreach生成的代码实际上有最后调用Dispose()的try-finally块。

C#4:dynamictypes的实例

我想我已经把自己的大脑半路包裹在了C#4中的dynamictypes概念中,但是不能为我的生活找出一个我真正想要使用它的场景。 我确定有很多,但我只是无法build立连接,以便如何devise一个解决scheme,更好地解决dynamic问题,而不是接口,dependency injection等。 那么,什么是dynamictypes使用适合的真实应用场景呢?

决定何时使用XmlDocument与XmlReader

我正在优化自定义对象 – > XML序列化实用程序,这一切都已经完成并且工作,这不是问题。 它通过加载一个文件到一个XmlDocument对象,然后recursion遍历所有的子节点。 我想,也许使用XmlReader而不是有XmlDocument加载/parsing整个事情会更快,所以我也实现了该版本。 algorithm是完全一样的,我使用包装类来抽象处理XmlNode与XmlReader 。 例如, GetChildren方法的yield返回一个子XmlNode或一个SubTree XmlReader 。 所以我写了一个testing驱动来testing这两个版本,并且使用了一个非平凡的数据集(一个大约有1,350个元素的900kb XML文件)。 但是,使用JetBrains的dotTRACE,我看到XmlReader版本实际上比XmlDocument版本更慢! 当我遍历子节点时,似乎有一些重要的处理涉及XmlReader读取调用。 所以我就这么说: XmlDocument和XmlReader的优点/缺点是什么,在什么情况下你应该使用? 我的猜测是有一个文件大小的阈值, XmlReader在性能上变得更经济,以及更less的内存密集。 不过,这个门槛似乎高于1MB。 我每次调用ReadSubTree来处理子节点: public override IEnumerable<IXmlSourceProvider> GetChildren () { XmlReader xr = myXmlSource.ReadSubtree (); // skip past the current element xr.Read (); while (xr.Read ()) { if (xr.NodeType != XmlNodeType.Element) continue; yield return new XmlReaderXmlSourceProvider (xr); […]

C#debugging:或ToString()?

有两种方法可以增加debugging信息的有效性,所以在debugging器中看不到{MyNamespace.MyProject.MyClass} 。 这些是使用DebuggerDisplayAttribute和ToString()方法。 using System.Diagnostics; … [DebuggerDisplay("Name = {Name}")] public class Person { public string Name; } 要么 public class Person { public string Name; public override string ToString() { return string.Format("Name = {0}", Name); } } 有没有任何理由更喜欢一个到另一个? 任何理由不这样做? 这纯粹是个人喜好吗?

正则expression式比python慢

嗨,我想了解为什么下面的代码使用正则expression式拆分string拆分 #include<regex> #include<vector> #include<string> std::vector<std::string> split(const std::string &s){ static const std::regex rsplit(" +"); auto rit = std::sregex_token_iterator(s.begin(), s.end(), rsplit, -1); auto rend = std::sregex_token_iterator(); auto res = std::vector<std::string>(rit, rend); return res; } int main(){ for(auto i=0; i< 10000; ++i) split("abc", " "); return 0; } 比以下的python代码慢 import re for i in range(10000): re.split(' +', 'ab […]

如果给一个无符号variables赋一个负值会发生什么?

我很好奇知道如果给一个无符号variables赋一个负值会发生什么。 代码看起来像这样。 unsigned int nVal = 0; nVal = -5; 它没有给我任何编译器错误。 当我运行程序时, nVal被分配了一个奇怪的值! 难道一些2的补码值被赋值给nVal ?

closures应用程序

closuresC#应用程序时,最佳做法是什么? 我已经读过,你可以使用: Environment.Exit(0); or Application.Exit(); 但有什么区别? 而且,关于Environment.Exit(0),我在使用Java之前使用过退出代码,但从未完全理解它们的用途。 他们在C#中退出应用程序时扮演什么angular色?

XmlNode值vs InnerText

我正在用一个充满URL的XML创build一个学校的ping应用程序。 由于XmlNode.Value导致null,我失去了一个小时。 然后我把它改成了InnerText ,它工作正常。 现在我想知道有什么区别,因为MSDN说.Value返回节点的值, InnerText返回节点及其所有子节点的连接值。 有人能为我解释这个吗? <sites> <site> <url>www.test.be</url> <email>test@test.be</email> </site> <site> <url>www.temp.be</url> <email>temp@temp.be</email> </site> <site> <url>www.lorim.ipsum</url> <email>interim.address@domain.com</email> </site></sites>

用C ++重构11

鉴于由c ++提供的大量程序员所提供的新工具集,针对代码简化,expression性,效率,浏览旧代码并进行调整(一些毫无意义,一些成功)来实现其目标。 尽pipe不要在这样的劳动中浪费太多时间,而只是做出非侵入性和自我包含的变化,那么最佳实践是什么? 让我把这个显而易见的事 使用auto来运行基于迭代器的循环: for (std::vector<foo>::const_iterator it(lala.begin()), ite(lala.end()); it != ite; ++it); // becomes for (auto it(lala.cbegin()), ite(lala.cend()); it != ite; ++it); 使用tie为多个分配,只是产生C风格的代码行( 如何分配多个值到一个结构? a = 1; b = 2; c = 3; d = 4; e = 5; // becomes std::tie(a, b, c, d, e) = std::make_tuple(1, 2, 3, 4, 5); 为了使一个类不可inheritance,只需声明它为“final”并删除实现了这种行为的代码。http://www.parashift.com/c++-faq/final-classes.html 使用delete关键字可以显式隐藏构造函数/析构函数,而不是将其声明为私有的(例如创build基于堆的对象的代码,不可复制的对象等) […]