显然有很多方法来迭代一个集合。 好奇的是,如果有任何分歧,或者为什么你会用另一种方式。 第一类: List<string> someList = <some way to init> foreach(string s in someList) { <process the string> } 另一种方式: List<string> someList = <some way to init> someList.ForEach(delegate(string s) { <process the string> }); 我想我的头顶上,而不是我上面使用的匿名委托,你会有一个可以指定的可重用的委托…
采取以下措施: class A {} class B : A {} class C { C() { var b = new B(); Foo(b); Foo2(ref b); // <= compile-time error: // "The 'ref' argument doesn't match the parameter type" } void Foo(A a) {} void Foo2(ref A a) {} } 为什么会发生上述编译时错误? 这与ref和out参数一起发生。
有什么区别 try { … } catch{ throw } 和 try{ … } catch(Exception e) {throw new Exception(e.message) } 无论第二个显示一个消息?
没有得到如下所示的东西来编译: public class Gen<T> where T : System.Array { } 与错误 约束不能是特殊的类“System.Array” 我开始怀疑,什么是 “特殊class”? 当他们在通用约束中指定System.Enum时,人们似乎经常会遇到同样的错误。 我也得到了与System.Object , System.Delegate , System.MulticastDelegate和System.ValueType相同的结果。 他们有更多吗? 我在C#中找不到“特殊类”的任何信息。 另外,这些类别有什么特别之处,我们不能将它们用作generics约束?
有没有什么办法可以在自动实现的属性中设置setter / getter的断点? int Counter { get; set; } 除了将其更改为标准属性(我这样做,但要做到这一点,我必须改变和重新编译整个项目)
有没有一种快速的方法来确定系统上的Boost C ++库的版本?
考虑下面的代码( p是unsigned char*的types,而bitmap->width是一些整数types,它是未知的,取决于我们使用的外部库的版本): for (unsigned x = 0; x < static_cast<unsigned>(bitmap->width); ++x) { *p++ = 0xAA; *p++ = 0xBB; *p++ = 0xCC; } 它是值得优化它[..] 有没有这样的情况下,可以写出更有效的结果: unsigned width(static_cast<unsigned>(bitmap->width)); for (unsigned x = 0; x < width; ++x) { *p++ = 0xAA; *p++ = 0xBB; *p++ = 0xCC; } …或者这是编译器优化这个微不足道的? 你认为什么是“更好”的代码? 编者注(艾克):对于那些想知道三文治文本的人来说,原来的这个问题,如同所说的那样,离危险的地方很近,尽pipe得到了正面的反馈,但却非常接近封闭。 这些已经被打破了。 但是,请不要惩罚处理这些问题的答复者。
为什么没有人在C ++中使用元组,无论是Boost Tuple库还是TR1的标准库? 我读过很多C ++代码,很less看到使用元组,但是我经常看到很多元组可以解决许多问题的地方(通常从函数返回多个值)。 元组允许你做这样的各种酷事: tie(a,b) = make_tuple(b,a); //swap a and b 这当然比这更好: temp=a; a=b; b=temp; 当然你可以这样做: swap(a,b); 但是如果你想旋转三个值呢? 你可以用元组来做到这一点: tie(a,b,c) = make_tuple(b,c,a); 元组也使得从函数中返回多个variables要容易得多,这可能比交换值更为常见。 使用对返回值的引用当然不是很优雅。 我没有想到元组有什么大的缺点? 如果没有,为什么他们很less使用? 他们慢吗? 还是只是人们不习惯他们? 使用元组是一个好主意吗?
如何在#ifdef中添加“或”条件? 我努力了 ” #ifdef CONDITION1 || CONDITION2 #endif 这不起作用。
在“完全引用C”一书中提到,char默认是无符号的。 但是我正试图用GCC和Visual Studio来validation这一点。 它是作为默认签名的。 哪一个是正确的?