Tag: C#的

对于在C编程中的VS?

C中有三个循环: while和do-while 。 他们之间有什么区别? 例如,几乎所有的语句都可以被语句replace,对吗? 那么,有什么优势使用?

以很多字段排列列表(C#)?

我想要在C#中的许多字段,而不是一个订单的对象列表。 例如,让我们假设我有一个叫做X的类,它有两个属性A和B,我有以下对象: object1 => A =“a”,B =“h” object2 => A =“a”,B =“c” object3 => A =“b”,B =“x” object4 => A =“b”,B =“b” 我想先用A属性来排列列表,当它们是等于的时候,用B元素sorting,那么顺序是: “a”“c” “a”“h” “b”“b” “b”“x” 据我所知,OrderBy方法按一个参数sorting。 问题 :如何通过多个字段来订购C#列表? 非常感谢你

转换可为空的bool? 布尔

你如何转换一个可空的bool? 在C# bool ? 我已经尝试过x.Value或x.HasValue …

从C#中的.resx文件读取string

如何从C#中的.resx文件中读取string? 请给我指导。 一步步

如何selectmap和unordered_map?

假设我想用一个string作为关键字映射数据。 我应该select什么容器, map或unordered_map ? unordered_map占用更多的内存,所以我们假设内存不是问题,关心的是速度。 unordered_map应该通常给O(1)的平均复杂度O(n)的最坏情况。 在什么情况下会到达O(n)? 什么时候map比unordered_map更省时? 当n很小时会发生吗? 假设我将使用STL unordered_map与默认haser Vs. 地图。 string是关键。 如果我要迭代元素而不是每次访问单个元素,我应该更喜欢map吗?

OpenCV undistortPoints和triangulatePoint给出了奇怪的结果(立体声)

我试图在空间中得到几个点的3D坐标,但是我得到了来自undistortPoints()和triangulatePoints()奇怪结果。 由于两台摄像机的分辨率不同,我分别对它们进行了校准,获得了0,34和0,43 RMS误差,然后使用stereoCalibrate()得到更多的matrix,得到0,708的RMS,然后使用stereoRectify()剩下的matrix。 在手边,我已经开始收集坐标的工作,但是我得到了奇怪的结果。 例如,input是(1228.709125, 342.79841) (935, 262) , undistortPoints()输出是(1228.709125, 342.79841) ,而另一个则是(1227.9016, 292.4686) (934, 176)和(1227.9016, 292.4686) 。 这很奇怪,因为这两个点都非常接近帧的中间,扭曲是最小的。 我没有想到它将它们移动了300个像素。 当传递给traingulatePoints() ,结果变得更加陌生 – 我测量了现实生活中三个点之间的距离(用一个尺子),并计算了每个图片上的像素之间的距离。 因为这次点位于一个非常平坦的平面上,这两个长度(像素和实际)匹配,如| AB | / | BC | 在这两种情况下是4/9左右。 然而, triangulatePoints()给我的结果离开轨道,与| AB | / | BC | 是3/2或4/2。 这是我的代码: double pointsBok[2] = { bokList[j].toFloat()+xBok/2, bokList[j+1].toFloat()+yBok/2 }; cv::Mat imgPointsBokProper = cv::Mat(1,1, CV_64FC2, pointsBok); double […]

C#genericstypes约束的一切可为空

所以我有这个class: public class Foo<T> where T : ??? { private T item; public bool IsNull() { return item == null; } } 现在我正在寻找一个types约束,允许我使用所有的types参数,可以为null 。 这意味着所有的引用types,以及所有的Nullable ( T? )types: Foo<String> … = … Foo<int?> … = … 应该是可以的。 使用class作为types约束只允许我使用引用types。 附加信息:我正在编写一个pipe道和filter应用程序,并希望使用null引用作为传递到pipe道中的最后一个项目,以便每个filter都可以很好地closures,执行清理等操作。

在使用intel编译器的Windows和Linux之间的性能差异:看看程序集

我正在Windows和Linux(x86-64)上运行一个程序。 它使用相同的编译器(Intel Parallel Studio XE 2017)进行编译,其版本相同,Windows版本比Linux版本快3倍。 罪魁祸首是对std :: erf的调用,在英特尔math库中解决了这两种情况(默认情况下,它在Windows上静态链接,在Linux上静态链接,但在Linux上使用dynamic链接可提供相同的性能)。 这是一个简单的程序来重现问题。 #include <cmath> #include <cstdio> int main() { int n = 100000000; float sum = 1.0f; for (int k = 0; k < n; k++) { sum += std::erf(sum); } std::printf("%7.2f\n", sum); } 当我使用vTune来分析这个程序时,我发现程序集在Windows和Linux版本之间有点不同。 这是Windows上的呼叫站点(循环) Block 3: "vmovaps xmm0, xmm6" call 0x1400023e0 <erff> Block 4: inc […]

asynchronous/等待与线程

在.Net 4.5中,Microsoft已经添加了新的Async/Awaitfunction来简化asynchronous编码。 不过,我想知道 Async/Await完全取代旧的方式使用Threads ? Async/Await能够执行任何Thread可以asynchronous执行的操作吗? Async/Await只能用于WebClient.DownloadStringAsync方法,或者我可以将任何同步方法转换为使用Async/Await而不是阻塞主线程?

为什么静态类不能实现接口?

可能重复: 为什么不C#允许静态方法来实现一个接口? 在我的应用程序中,我想使用一个存储库来完成原始数据访问(TestRepository,SqlRepository,FlatFileRepository等)。 因为在我的应用程序的整个运行时间中都会使用这样一个存储库,所以对我来说这似乎是一个明智的做法,所以我可以去 SqlRepository.GetTheThingById(5); 没有它必须一直重新生成。 因为我希望我的存储库可以互换,所以我想让他们实现一个通用接口:IRepository。 但是当我试图这样做,我得到了 "Static classes cannot implement interfaces" 为什么他们不能? 你怎么build议我改变我的devise呢? 有我可以使用的模式吗? UPDATE 五年之后,这个问题被访问了20多次,我了解了存储库模式的缺点,了解了IoC,意识到我的问题制定得不好。 我没有真正问过接口的C#规范是什么,而是为什么它故意以这种特定的方式限制我。 实际的答案是调用实例或types的方法的语法是不同的。 但问题是closures的。