我一直在学习C#中的对象初始值设定项,但现在我想知道它是如何工作的,当它与构造函数冲突。 public class A { public bool foo { get; set; } public A() { foo = true; } public A(bool bar) { foo = bar; } } 当我尝试这个时会发生什么? public class B { a = A() {foo = false}; b = A(true) {foo = false}; } 构造函数中的默认是一个很好的方式来让一个bool开始真实并且可以被改变? public A(bar=true) { foo = bar; }
我试图使用HtmlAgilityPack库来parsing页面中的一些链接,但是我没有看到我期望的方法的结果。 在下面我有一个HtmlNodeCollection的链接。 对于每一个链接,我想检查是否有一个图像节点,然后parsing它的attribures,但是linkNode的SelectNodes和SelectSingleNode方法似乎是search父文档而不是linkNode的childNodes什么给? HtmlDocument htmldoc = new HtmlDocument(); htmldoc.LoadHtml(content); HtmlNodeCollection linkNodes = htmldoc.DocumentNode.SelectNodes("//a[@href]"); foreach(HtmlNode linkNode in linkNodes) { string linkTitle = linkNode.GetAttributeValue("title", string.Empty); if (linkTitle == string.Empty) { HtmlNode imageNode = linkNode.SelectSingleNode("/img[@alt]"); } } 有没有其他方法可以得到linkNode的图像childNode的ALT属性,如果它存在?
我正在尝试玩新的任务,但有些事情我不明白。 首先,代码非常简单。 我传递一些path到一些图像文件,并尝试添加一个任务来处理它们中的每一个: public Boolean AddPictures(IList<string> paths) { Boolean result = (paths.Count > 0); List<Task> tasks = new List<Task>(paths.Count); foreach (string path in paths) { var task = Task.Factory.StartNew(() => { Boolean taskResult = ProcessPicture(path); return taskResult; }); task.ContinueWith(t => result &= t.Result); tasks.Add(task); } Task.WaitAll(tasks.ToArray()); return result; } 我发现,如果我让这个运行,比如一个unit testing中的3个path列表,所有这三个任务都使用提供的列表中的最后一个path。 如果我一步一步(并减慢循环的处理),则使用循环中的每条path。 有人可以解释发生了什么,为什么? 可能的解决方法?
我想要格式化一个整数作为百分比没有它乘以100 这里所示。 因为我的源是int,所以先把它除以100不是一个有效的选项。 这可能吗? [DisplayFormat(DataFormatString = "{0:#%}")]
由于在这个环境中的GNU标准库实现,我正在努力解决看起来在c ++ 11符号分辨率上的模糊问题: Arch Linux 4.2.5-1(x86_64) g ++ 5.2.0 铿锵++ 3.7.0 例: #include <iostream> #include <string> struct version { unsigned major; unsigned minor; unsigned patch; version(unsigned major, unsigned minor, unsigned patch) : major(major), minor(minor), patch(patch) { } friend std::ostream & operator<<(std::ostream & out, version const& v) { out << v.major << "."; out << v.minor […]
简单的问题(在C ++中): 如何将字符转换为string 所以例如我有一个stringstr =“abc”; 我想提取第一个字母,但我希望它是一个string,而不是一个字符。 我试过了 string firstLetter = str[0] + ""; 和 string firstLetter = & str[0]; 两者都行不通。 想法?
是否有一个读取Mac OS X二进制文件的工具,可以打印有关重新定位表和符号偏移的信息,类似于这个readelf输出? readelf -r app Relocation section '.rel.dyn' at offset 0x5ec contains 2 entries: Offset Info Type Sym.Value Sym. Name 08049d58 00001706 R_386_GLOB_DAT 00000000 __gmon_start__ 08049d60 00000305 R_386_COPY 08049d60 _ZSt4cout Relocation section '.rel.plt' at offset 0x5fc contains 13 entries: Offset Info Type Sym.Value Sym. Name 08049d24 00000107 R_386_JUMP_SLOT 0804868c print 08049d28 00000207 R_386_JUMP_SLOT 0804869c […]
在阅读这个问题之前: 这个问题不是关于如何使用dynamic_cast有用的。 它只是关于它的performance。 我最近开发了一个dynamic_cast被广泛使用的devise。 当与同事讨论时,几乎每个人都说dynamic_cast不应该被使用,因为它的performance不好(这些都是不同背景的同事,在某些情况下彼此不认识,我在一家大公司工作) 我决定testing这种方法的性能,而不是仅仅相信它们。 以下代码被使用: ptime firstValue( microsec_clock::local_time() ); ChildObject* castedObject = dynamic_cast<ChildObject*>(parentObject); ptime secondValue( microsec_clock::local_time() ); time_duration diff = secondValue – firstValue; std::cout << "Cast1 lasts:\t" << diff.fractional_seconds() << " microsec" << std::endl; 上面的代码使用来自Linux上boost::date_time方法来获取可用的值。 我在一次执行中完成了3个dynamic_cast ,测量它们的代码是相同的。 1次执行的结果如下: Cast1持续:74微秒 Cast2持续:2微秒 Cast3持续:1微秒 第一个演员总是拿着74-111微秒,下面的演员在同样的执行下拿了1-3微秒。 所以最后我的问题是: dynamic_cast真的performance不好吗? 根据testing结果它不是。 我的testing代码是否正确? 为什么这么多的开发人员认为,如果不是这样,速度会变慢呢?
我不是专家,所以对我很容易。 这两个代码段有什么区别? #define BIT3 (0x1 < < 3) static int a; 和 #define BIT3 (0x1 << 3) static int a; 另外,有没有办法在一行写第一个? 这种多线式的点是什么? 下面的代码好吗? #define BIT3 (0x1 << 3) static int a;
我需要让我的代码读取,如果文件不存在创buildelse append。 现在它正在阅读,如果它存在创build和追加。 这里是代码: if (File.Exists(path)) { using (StreamWriter sw = File.CreateText(path)) { 我会这样做吗? if (! File.Exists(path)) { using (StreamWriter sw = File.CreateText(path)) { 编辑: string path = txtFilePath.Text; if (!File.Exists(path)) { using (StreamWriter sw = File.CreateText(path)) { foreach (var line in employeeList.Items) { sw.WriteLine(((Employee)line).FirstName); sw.WriteLine(((Employee)line).LastName); sw.WriteLine(((Employee)line).JobTitle); } } } else { StreamWriter sw = […]