Tag: C#的

是空的接口代码味道?

我有一个函数返回相同types的对象(查询结果),但没有属性或方法的共同点。 为了有一个通用的types,我使用了一个空接口作为返回types,并且实现了这两个接口。 这当然听起来不对。 我只能抱住自己,希望有一天这些类会有共同的东西,我会把这个共同的逻辑移到我的空白界面。 然而,我并不满意,想着是否应该有两种不同的方法,然后有条件地打电话。 这是一个更好的方法吗? 我也被告知,.NET Framework使用空接口进行标记。 我的问题是:空的界面是devise问题的一个强烈的标志,还是被广泛使用? 编辑 :对于那些感兴趣的,我后来发现,在function语言歧视工会是我想要实现的完美的解决scheme。 C#对这个概念看起来并不友好。 编辑 :我写了一个关于这个问题的更长的篇幅,详细解释了这个问题和解决scheme。

我写了一个程序,允许两个class级“打架”。 无论出于何种原因,C#总是赢。 VB.NET出了什么问题?

我写了一个程序,允许两个class级“打架”。 无论出于何种原因,C#总是赢。 VB.NET出了什么问题? static void Main(string[] args) { Player a = new A(); Player b = new B(); if (a.Power > b.Power) Console.WriteLine("C# won"); else if (a.Power < b.Power) Console.WriteLine("VB won"); else Console.WriteLine("Tie"); } 这里是玩家:C#中的玩家A: public class A : Player { private int desiredPower = 100; public override int GetPower { get { return desiredPower; […]

List.Add()线程安全

我知道一般List不是线程安全的,但是如果线程从不在列表中执行任何其他操作(比如遍历它),那么简单地将项添加到列表中有什么问题吗? 例: List<object> list = new List<object>(); Parallel.ForEach(transactions, tran => { list.Add(new object()); });

我如何处理“有符号/无符号不匹配”警告(C4018)?

我使用C ++编写的大量计算代码,考虑到高性能和低内存开销。 它使用STL容器(主要是vector ),并且几乎在每一个函数中迭代这些容器。 迭代代码如下所示: for (int i = 0; i < things.size(); ++i) { // … } 但会产生签名/未签名的不匹配警告(Visual Studio中的C4018)。 用一些unsignedtypesreplaceint是一个问题,因为我们经常使用OpenMP pragmas,它需要计数器为int 。 我要压制(数百个)警告,但是我恐怕错过了一些优雅的解决scheme。 在迭代器上 。 我认为在适当的地方应用迭代器是很好的。 我正在使用的代码将永远不会将随机访问容器更改为list或其他东西(所以迭代int i已经是容器不可知论者),并将始终需要当前的索引。 而所有你需要input的代码(迭代器本身和索引)只是使事情变得复杂,并且混淆了底层代码的简单性。

编组 – 这是什么,为什么我们需要它?

什么是编组,为什么我们需要它? 我发现很难相信我不能从C#发送一个int到C,并且必须编组。 为什么C#不能直接发送32位的开始和终止信号,告诉C代码它已经收到一个int ? 如果有什么好的教程或网站说明为什么我们需要编组以及如何使用它,那就太棒了。

虚拟析构函数是inheritance的吗?

如果我有一个虚拟析构函数的基类。 有一个派生类来声明一个虚拟析构函数吗? class base { public: virtual ~base () {} }; class derived : base { public: virtual ~derived () {} // 1) ~derived () {} // 2) }; 具体问题: 是1)和2)是一样的吗? 是2)自动虚拟,因为它的基础或是它“停止”虚拟? 如果没有任何关系,派生的析构函数可以省略吗? 声明派生析构函数的最佳做法是什么? 声明它是虚拟的,非虚拟的或者如果可能的话省略它?

为什么从C ++ 11中删除了std :: pow(double,int)?

在研究有效的方法来计算p ^ q(指数运算),其中q是一个整数并回顾了C ++ 98和C ++ 11标准时,我注意到显然std::pow(double, int)过载在C ++ 11。 在C ++ 98 26.5 / 6中有double pow(double, int); 签名。 在C ++ 11 26.8中我只能find一对float , double或long double重载,并且明确指出,如果参数types是整数和双float的混合, pow(double, double)重载应该是采摘。 这只是澄清了以前的意图,是不正确地添加在C + + 98,他们实际上删除了C + + 11,或其他? pow(double, int)版本显然提供了一个很好的优化机会,所以看起来很奇怪,他们会被删除。 编译器是否仍然符合提供这种优化过载的标准?

为什么不std :: queue :: pop返回值。

我经历了这个页面,但我无法得到相同的理由。 那里有提到 “它是更明智的,它根本不返回任何价值,并要求客户使用前()检查队列前面的值” 但是从front()检查一个元素也需要该元素在左值被复制。 例如在这个代码段 std::queue<int> myqueue; int myint; int result; std::cin >> myint; myqueue.push (myint); / *这里临时将在RHS上创build,这将被分配给结果,并且如果通过引用返回,则结果将在popup操作后被渲染为无效* / result = myqueue.front(); //result. std::cout << ' ' << result; myqueue.pop(); 在第五行cout对象首先创buildmyqueue.front()的副本,然后将其分配给结果。 所以,差异是什么,popupfunction可以做同样的事情。

使用msbuild执行文件系统发布configuration文件

我有使用VS2010创build的ac#.Net 4.0项目,现在正在使用VS2012访问。 我试图从本网站只发布所需的文件到目标位置(C:\ builds \ MyProject [Files]) 我的文件结构: ./ProjectRoot / MyProject.csproj ./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml 我正在通过MSBuild运行以下内容: C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild.exe ./ProjectRoot/MyProject.csproj / p:DeployOnBuild = true /p:PublishProfile=./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml 这是FileSystemDebug.pubxml中的xml <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <WebPublishMethod>FileSystem</WebPublishMethod> <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> <LastUsedPlatform>Any CPU</LastUsedPlatform> <SiteUrlToLaunchAfterPublish /> <ExcludeApp_Data>False</ExcludeApp_Data> <publishUrl>C:\builds\MyProject\</publishUrl> <DeleteExistingFiles>True</DeleteExistingFiles> </PropertyGroup> </Project> 由此产生的行为是: 在这里创build一个zip文件: ./ProjectRoot/obj/Debug/Package/MyProject.zip 没有部署到<publishUrl>C:\builds\MyProject\</publishUrl> WTF 创build的zip文件是猪早餐和充满应用程序不需要的文件。 当我通过Visual Studio运行这个发布configuration文件时,会在* C:\ builds […]

Task <int>如何成为一个int?

我们有这个方法。 async Task<int> AccessTheWebAsync() { HttpClient client = new HttpClient(); Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com"); // You can do work here that doesn't rely on the string from GetStringAsync. DoIndependentWork(); string urlContents = await getStringTask; //The thing is that this returns an int to a method that has a return type of Task<int> return urlContents.Length; } […]