Tag: C#的

在foreach循环内部或外部声明一个variables:哪个更快/更好?

哪一个是更快/更好的? 这个: List<User> list = new List<User>(); User u; foreach (string s in l) { u = new User(); u.Name = s; list.Add(u); } 或者这个: List<User> list = new List<User>(); foreach (string s in l) { User u = new User(); u.Name = s; list.Add(u); } 我的新手发展技能告诉我,第一个更好,但我的一个朋友告诉我,我错了,但不能给我一个很好的理由,为什么第二个更好。 性能是否有所不同?

协方差和上传之间的区别

协变和上传之间有什么区别,或者更具体地说,为什么他们有不同的名字? 我已经看到下面的例子被称为“上传”: string s = "hello"; object o = s; //upcast to 'string' to 'object' 鉴于以下我所见到的“协变”: string[] s = new string[100]; object[] o = s; IEnumerable<string> ies = new List<string>(); IEnumerable<object> ieo = ies; 现在,对我未经训练的人来说,协变似乎与上演一样,只不过它指的是collections的铸造。 (关于逆转和下转也可以做出类似的说法)。 这真的很简单吗?

我应该使用uint在C#中的值不能为负?

我刚刚尝试实现一个类,其中许多长度/计数属性等是uint而不是int 。 然而,在这样做的时候,我注意到这样做实际上是痛苦的,就好像没有人真的想这样做。 几乎所有派生出整数types的东西都会返回一个int ,因此需要在几个点上进行转换。 我想构造一个StringBuffer ,其缓冲区长度默认为该类中的一个字段。 还需要演员阵容。 所以我想知道我是否应该回到这里int 。 无论如何,我当然不会使用整个范围。 我只是想,因为我在那里处理的东西根本不能是负面的(如果是的话,这将是一个错误),实际使用uint是一个不错的主意。 PS:我看到这个问题 ,这至less解释了为什么框架本身总是使用int但即使在自己的代码中,坚持使用uint实际上也很麻烦,这使得我认为它显然不是真正需要的。

什么是“你好,世界!”例如“std :: ref”?

有人可以给一个简单的例子,演示std::ref的function? 我的意思是一个例子,其中一些其他的构造(如元组或数据types模板) 只有在不能解释std::ref 时才被使用。 我在这里和这里发现了两个关于std::ref问题。 但是第一个是关于编译器的错误,第二个是使用std::ref例子不包含std::ref ,它们涉及元组和数据types模板,这使得对这些例子的理解变得复杂。

CMake输出/build立目录

我对cmake非常陌生,阅读了一些关于如何使用它的教程,并编写了一些复杂的50行CMake脚本,以便为3个不同的编译器编写一个程序。 这大概就是我在cmake上的所有知识。 现在我的问题是,我有一些源代码,我的文件夹,我不想碰/混乱,当我做的程序。 我想要所有的cmake,并把输出文件和文件夹放到../Compile/中,所以我在cmake脚本中改变了一些variables,并且在我的笔记本电脑上做了这样的工作, Compile$ cmake ../src Compile$ make 在那里,我有一个干净的输出在我现在正在的文件夹,这正是我正在寻找。 现在我转移到另一台电脑,并重新编译CMake 2.8.11.2,我几乎回到了一个! 它总是将这个东西编译到我的CMakeLists.txt所在的src文件夹中。 我在cmake脚本中select目录的部分是这样的: set(dir ${CMAKE_CURRENT_SOURCE_DIR}/../Compile/) set(EXECUTABLE_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE) set(LIBRARY_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dir}) set(CMAKE_BUILD_FILES_DIRECTORY ${dir}) set(CMAKE_BUILD_DIRECTORY ${dir}) set(CMAKE_BINARY_DIR ${dir}) SET(EXECUTABLE_OUTPUT_PATH ${dir}) SET(LIBRARY_OUTPUT_PATH ${dir}lib) SET(CMAKE_CACHEFILE_DIR ${dir}) 现在它总是以: — Build files have been written to: /…/src 我错过了什么吗?

为什么strncpy不能终止?

strncpy()可以防止缓冲区溢出。 但是,如果它阻止了没有null终止的溢出,那么所有的可能性都会导致后续的string操作溢出。 所以为了防止这个,我发现自己在做: strncpy( dest, src, LEN ); dest[LEN – 1] = '\0'; man strncpy给出: strncpy()函数是相似的,除了复制不超过n个字节的src。 因此,如果在src的前n个字节中没有空字节,结果将不会以空终止。 没有null终止一些看起来像无辜的东西: printf( "FOO: %s\n", dest ); …可能会崩溃。 有没有比strncpy()更安全的替代方法?

错误:使用Libtool库,但'LIBTOOL'未定义

我正在尝试automake OrientDb C ++库,但得到一些错误。 Makefile.am:10: error: Libtool library used but 'LIBTOOL' is undefined Makefile.am:10: The usual way to define 'LIBTOOL' is to add 'LT_INIT' Makefile.am:10: to 'configure.ac' and run 'aclocal' and 'autoconf' again. Makefile.am:10: If 'LT_INIT' is in 'configure.ac', make sure Makefile.am:10: its definition is in aclocal's search path. https://github.com/tglman/orientdb-c https://github.com/tglman/orientdb-c/wiki/Install 我已经configure.ac和Makefile.am已经定义。 我运行以下autotools aclocal会 和autoheader […]

检查项目后触发哪个CheckedListBox事件?

我有一个CheckedListBox,我想要一个事件后检查一个项目,以便我可以使用CheckedItems与新的状态。 由于ItemChecked在CheckedItems更新之前被触发,因此它将无法正常工作。 什么样的方法或事件可以用来通知CheckedItems更新时?

跨平台IPC

我正在寻找可能的IPC机制的build议是: 跨平台 (Win32和Linux至less) 使用C ++以及最常用的脚本语言 (perl,ruby,python等)很容易实现。 最后,从编程的angular度来看简单易用 ! 我的select是什么? 我在Linux下进行编程,但是我希望将来可以写入其他操作系统。 我想过使用套接字,命名pipe道或类似于DBus的东西。

C中数据types的最小值和最大值

什么是函数来确定在C中的数据types的值(即int,char.etc)的最小和最大的可能性?