Tag: C#的

C#方法命名约定:ToSomething与AsSomething

当我为业务逻辑对象编写一些扩展方法时,我遇到了重命名转换方法的问题。 someObject.ToAnotherObject()会很好用广泛使用的object.ToString() 。 然而,LINQ,例如,混合了两个变种,我找不到他们之间的差异。 ToDictionary() , ToList() , AsParallel() , AsQueryable() ,… 这两个命名约定有什么区别,我应该知道什么来决定是否用于我自己的类?

现在我们有std :: array什么用于C风格的数组?

std::array远远优于C数组。 即使我想与遗留代码进行互操作,我也可以使用std::array::data() 。 有没有什么原因我会想要一个老式的arrays?

为什么声明“2i;”不会导致编译器错误?

而不是2*i ,我不小心写了2i : int foo(int i) { 2i; return 2i; } 我希望编译器能够发现错误。 但事实并非如此。 那么2i是C中的一个有效陈述? 如果是的话,它是做什么的? 困惑! 我编译使用GCC版本5.3.0,这里是汇编输出: .file "strange.c" .text .globl foo .type foo, @function foo: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl %edi, -4(%rbp) nop popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size foo, .-foo […]

DataContractSerializer不会调用我的构造函数?

我只是意识到一些疯狂的东西,我认为这是完全不可能的:当反序列化一个对象时, DataContractSerializer不会调用构造函数 ! 以这个class级为例: [DataContract] public class Book { public Book() { // breakpoint here } [DataMember(Order = 0)] public string Title { get; set; } [DataMember(Order = 1)] public string Author { get; set; } [DataMember(Order = 2)] public string Summary { get; set; } } 当我反序列化这个类的一个对象时,断点不会被打中。 我完全不知道它是如何可能的,因为它是这个对象的唯一构造函数! 我认为,也许由于DataContract属性,编译器生成了一个额外的构造函数,但我无法通过reflectionfind它… 所以,我想知道的是:如何创build我的类的实例,而不需要调用构造函数? 注:我知道,我可以使用OnDeserializing属性来初始化我的对象,当反序列化开始时,这不是我的问题的主题。

如何使用C#6“使用静态”function?

我正在看看C#6中的一些新function ,特别是“使用静态” 。 使用static是一种新的using子句,可以让你直接将静态成员types导入到作用域中。 (博客文章的底部) 这个想法如下,根据我发现的几个教程, 代替: using System; class Program { static void Main() { Console.WriteLine("Hello world!"); Console.WriteLine("Another message"); } } 您可以使用静态类的新C#6function省略重复的Console语句: using System.Console; // ^ `.Console` added. class Program { static void Main() { WriteLine("Hello world!"); WriteLine("Another message"); } // ^ `Console.` removed. } 但是,这似乎并没有为我工作。 我在using声明中遇到错误,他说: “ using namespace ”指令的A只能应用于命名空间;“ Console ”不是命名空间的types,考虑“ using […]

把一个简单的套接字转换成SSL套接字

我写了简单的C程序,它们使用套接字('client'和'server')。 (UNIX / Linux使用) 服务器端只是创build一个套接字: sockfd = socket(AF_INET, SOCK_STREAM, 0); 然后将其绑定到sockaddr: bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); 并听取(并接受和读取): listen(sockfd,5); newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); read(newsockfd,buffer,255); 客户端创build套接字,然后写入它。 现在,我想把这个简单的连接转换成一个SSL连接,以最简单,最田园,最新颖和最快捷的方式。 我试图添加OpenSSL到我的项目,但我找不到一个简单的方法来实现我想要的。

为什么在C ++中引用不是“const”?

我们知道一个“constvariables”表示一旦赋值,就不能更改variables,如下所示: int const i = 1; i = 2; 上面的程序将不能编译; gcc提示错误: assignment of read-only variable 'i' 没问题,我可以理解,但下面的例子超出我的理解: #include<iostream> using namespace std; int main() { boolalpha(cout); int const i = 1; cout << is_const<decltype(i)>::value << endl; int const &ri = i; cout << is_const<decltype(ri)>::value << endl; return 0; } 它输出 true false 奇怪的。 我们知道,一旦引用绑定到一个名称/variables,我们不能改变这个绑定,我们改变它的绑定对象。 所以我想ri的types应该和i :当i是一个int […]

浮点与现代硬件上的整数计算

我正在用C ++做一些关键性能的工作,而且我们目前正在使用整数计算来处理本质上浮点的问题,因为“更快”。 这导致了很多烦人的问题,并增加了很多令人讨厌的代码。 现在,我记得大约读了386天的浮点计算如此慢,我相信(IIRC)有一个可选的共同进程。 但是现在肯定有更复杂和更强大的CPU,如果进行浮点或整数计算,“速度”没有什么区别? 特别是由于实际的计算时间相对于导致pipe道失速或从主存储器中取出某些东西而言是微小的。 我知道正确的答案是在目标硬件上进行基准testing,那么testing它的好方法是什么? 我写了两个微小的C ++程序,并将它们的运行时间与Linux上的“time”进行了比较,但是实际运行时间太可变(不能帮助我在虚拟服务器上运行)。 没有花费我的整个一天运行数百个基准,制作图表等是否有我可以做的,以获得合理的相对速度testing? 任何想法或想法? 我完全错了吗? 我使用的程序如下,它们在任何方面都不相同: #include <iostream> #include <cmath> #include <cstdlib> #include <time.h> int main( int argc, char** argv ) { int accum = 0; srand( time( NULL ) ); for( unsigned int i = 0; i < 100000000; ++i ) { accum += rand( ) % […]

Doxygen替代C ++

虽然doxygen似乎很擅长索引一个大型C ++项目,但我还是有一些主要的抱怨。 生成的输出是丑陋的,组织得不好。 只是在doxygen网站find一个function通常是一个痛苦。 find标记错误的周转缓慢。 即我必须索引我的整个项目,以发现我在一些函数上使用了错误的语法。 标记是丑陋的…减价,重组文本,或一些人性化的标记语言会更好。 有没有像C ++支持良好的工具? Doxygen为C ++编制索引的能力实际上是非常有用的……这只是它提供信息的方式,而且在评论中需要难以处理的标记,这是一个很难处理的问题。

标志启用彻底和详细的g ++警告

通常在gcc下的C中,我将从以下一组警告标志开始(从多个来源痛苦地组装): -Wall -Wextra -Wformat-nonliteral -Wcast-align -Wpointer-arith -Wbad-function-cast \ -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Winline -Wundef \ -Wnested-externs -Wcast-qual -Wshadow -Wwrite-strings -Wno-unused-parameter \ -Wfloat-equal -pedantic -ansi 我将构build(至less我的debugging版本)这个警告,并修复我可能可以(通常是一切)的一切,然后只删除标志,如果他们不相关或不可修复(几乎从来没有这样的情况下)。 有时候,如果我不得不在编译的时候离开,那么我还会添加 – -Werror 。 我只是拿起C ++(是的,我比时代落后了15年),而且我想从右脚开始。 我的问题是:是否有人有一个预编译的类似的完整的警告标志为C ++下g++ ? (我知道他们中的很多人会是一样的)