草庐IT

c# - 枚举应该放在单独的文件中还是放在另一个类中?

我目前有一个包含以下枚举的类文件:usingSystem;namespaceHelper{publicenumProcessType{Word=0,Adobe=1,}}或者我应该在使用它的类中包含枚举吗?我注意到Microsoft为DockStyle创建了一个新的类文件:usingSystem;usingSystem.ComponentModel;usingSystem.Drawing.Design;namespaceSystem.Windows.Forms{publicenumDockStyle{None=0,Top=1,Bottom=2,Left=3,Right=4,.Fill=5

c# - 字符串实际上是一个字符数组还是只有一个索引器?

由于以下代码在C#中是可能的,所以我很想知道字符串是否实际上是一个字符数组:stringa="TEST";charC=a[0];//willbeT 最佳答案 System.String不是Char的.NET数组,因为:char[]testArray="test".ToCharArray();testArray[0]='T';将编译,但是:stringtestString="test";testString[0]='T';不会。字符数组是可变的,字符串不是。此外,stringisArray返回false,而char[]isArray返

c# - .NET 2.0 还是 3.5?

我们的客户使用我们软件的vb6版本。我们正在将它们升级为用C#编写的.NET应用程序...使用.net2.0的批量是否比.net3.5少?我对更小体积的定义是:体积更小、安装时间更短等。无论如何,他们中的大多数可能已经有了2.0。我问是因为我想在3.5中利用LINQ。 最佳答案 要利用LINQ,您需要3.5(除非您想将LINQBridge与2.0一起使用)。对于较小的安装程序,.Net3.5Sp1有一个名为“ClientProfile”的新功能。.NETFramework客户端配置文件设置仅包含.NETFramework中通常用于客

c# - 我应该为每个 Paint 请求创建新的 Pens/Brush 还是在整个应用程序生命周期中保留它们?

我有一个可以大量绘图的应用程序,我们假设它是一个类似Viso的应用程序。它的对象具有多个绘制的子对象,可以连接事物、调整大小等。目前,当我在特定的子对象或对象上调用绘画时,我会执行以下操作:using(varpen=newPen(this.ForeColor)){//Paintforthisobject.}我读过相互矛盾的答案,认为应该为不断绘制相同内容(可能只是调整大小、移动等)的应用程序完成此操作。我应该将Pen/Brush与对象一起存储,然后在处理应用程序时将它们全部处理掉,还是它们的效率足以为每个绘制调用创建/处理(请记住,这是一个图形密集型应用程序)。编辑:已经有两个答案相互

c# - lock(){} 是锁定资源,还是锁定一段代码?

我仍然很困惑......当我们写这样的东西时:Objecto=newObject();varresource=newDictionary();...并且有两个代码块在访问资源时锁定o...//Codeonelock(o){//readfromresource}//Codetwolock(o){//writetoresource}现在,如果我有两个线程,一个线程执行从resource读取的代码,另一个线程执行代码写入它,我想锁定resource这样当它正在阅读,作者将不得不等待(反之亦然——如果它正在被写入,读者将不得不等待)。锁构造对我有帮助吗?...还是我应该使用其他东西?(出于本示

C# 数组还是字典?

我想知道C#数组是否具有恒定的访问速度?我需要在静态数组中存储1000个项目,这些项目将在服务器启动期间进行初始化。该数组将只读使用,所以数组不会有任何变化。我应该改用简单的C#数组(newMyClass[])还是字典。我是C#的新手,正在尝试了解C#数组访问的工作原理。它们可以在速度上与C++数组进行比较吗? 最佳答案 最佳选择取决于您需要如何访问元素。如果你想通过索引访问它们,那么使用数组。C#中的数组具有恒定的访问速度,并且在访问速度方面与C++数组非常相似。但是,字典的访问速度非常快(Itemproperty接近O(1)的访

c# - List<T> - 我传递的是对象还是引用?

好吧,我研究了泛型并有以下问题:Listlist=newListSomeClassMyInstance=SomeClass();list.Add(MyInstance);我不确定将添加到列表中的是什么-引用或引用类型的对象(指向MyInstance的实际值)。编辑:或者我将添加指向实际对象的值(即引用数据类型)?谢谢 最佳答案 当你处理引用类型时,你总是在处理引用,因此引用将被添加到列表中(实际上是引用的副本)。您实际上没有选择;这就是语言的工作原理。 关于c#-List-我传递的是对象

c# - 投然后检查还是检查然后投?

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Castingvsusingthe‘as’keywordintheCLR哪种方法被认为是最佳实践?先投?publicstringDescribe(IColacola){varcoke=colaasCocaCola;if(coke!=null){stringresult;//someuniquecoca-colaonlycodehere.returnresult;}varpepsi=colaasPepsi;if(pepsi!=null){stringresult;//someuniquepepsionlycode

c# - C# 是通过引用还是作为副本将 List<T> 传递给方法?

这个问题在这里已经有了答案:Arearraysorlistspassedbydefaultbyreferenceinc#?(4个答案)关闭8年前。从C/C++迈出我在C#世界的第一步,所以细节有点模糊。据我所知,默认情况下,类是通过引用传递的,但是例如。列表如:voidDoStuff(Liststrs){//dostuffwiththelistofstrings}和其他地方Listsl=newList();//nextfilllistinaloopetc.andthendostuffwithit:DoStuff(sl);在这种情况下,sl是通过引用传递的还是制作的副本,以便我需要重新定

c# - List<MyClass> 对象缓冲区在哪里维护?它是在 RAM 上还是在 HDD 上?

我的问题可能听起来有点含糊。但我想知道的是List在哪里缓冲区保持不变。我有一个列表List我正在向其中添加来自无限循环的项目。但是Windows服务(我在其中创建列表)的RAM消耗从未超过17MB。事实上,即使我继续向列表中添加项目,它也徘徊在15-16MB之间。我试图对我的服务进行一些负载测试并遇到了这个问题。谁能告诉我它是否将数据转储到机器上的某个临时位置,并从那里选择它,因为我没有看到RAM消耗增加。我无限调用的方法是AddMessageToList()。classMainClass{ListmessageList=newList();privatevoidAddMessage