我几年前使用过OO编程语言和技术(主要是在C++上),但在此期间并没有对OO做太多。我开始用C#制作一个小实用程序。我可以在不使用良好的OO实践的情况下简单地对所有内容进行编程,但这对我来说应用OO技术是一个很好的复习。就像数据库规范化级别一样,我正在寻找一个list,它会提醒我“好的”面向对象程序的各种经验法则-一个简明的是/否列表,我可以在设计和实现期间偶尔阅读以防止我按程序思考和工作。如果它包含适当的OO术语和概念,那么任何检查项目都可以轻松搜索以获取更多信息,将会更有用。list上应该包含哪些内容可以帮助开发优秀的OO软件?相反,可以应用哪些“测试”来表明软件不是面向对象的?
我有一个方法:staticvoidFileChangesDetected(Listfiles)我使用了VisualStudio2010和Resharper。Resharper总是建议我更改List至IEnumerable,我想知道这是为什么。在方法中,我只是这样做:foreach(varfileinfiles){...}使用IEnumerable有好处吗?而不是List? 最佳答案 这一切都与LSP有关(里氏代换原则)。基本上,与其使用实现,不如编写抽象代码。在这种特定情况下,如果您所做的只是遍历列表,您可以使用IEnumerabl
为什么我不能投List作为List?为什么以下不起作用:internalclassObjBase{}internalclassObj:ObjBase{}internalclassObjManager{internalListreturnStuff(){returngetSomeStuff()asList;}privateListgetSomeStuff(){returnnewList();}}相反,我必须这样做:internalclassObjBase{}internalclassObj:ObjBase{}internalclassObjManager{internalListretu
我有2个列表对象(简化):varfileList=Directory.EnumerateFiles(baseSourceFolderStr,fileNameStartStr+"*",SearchOption.AllDirectories);varfilterList=newList();filterList.Add("ThisFolderName");filterList.Add("ThatFolderName");我想过滤fileLst以仅返回包含filterList中任何文件夹名称的文件。(我希望这是有道理的..)我试过下面的表达式,但这总是返回一个空列表。varfilteredF
为什么这个程序打印“notadded”而我认为它应该打印“added”?usingSystem;usingSystem.Collections.Generic;classElement{publicintid;publicElement(intid){this.id=id;}publicstaticimplicitoperatorElement(intd){Elementret=newElement(d);returnret;}publicstaticbooloperator==(Elemente1,Elemente2){return(e1.id==e2.id);}publicstat
可以像这样在编译时创建一个数组;int[]myValues=newint[]{1,2,3};但是我想做这样的事情;ListmyValues=newList(){1,2,3};编译器说不。有没有办法在不使用LINQ(C#3.0)的情况下执行此操作(C#2.0)? 最佳答案 ListmyValues=newList(newint[]{1,2,3});这将创建一个中间数组,因此可能有更有效的方法来做同样的事情。编辑:JohnFeminella建议创建一个工厂方法来接受参数列表并返回一个列表,您可以按如下方式实现:ListCreateLis
我正在实现一个优先级队列,并希望遍历列表以插入到正确的位置。在文档中指出C#List.Item属性是O(1):List.ItemProperty例如intretrivedValue=myIntList[5];这怎么可能,因为add也是O(1)?这就像吃了cookies而且还没有吃。我头脑中的普通列表在访问元素时的复杂度为O(n)。 最佳答案 标准List类型由具有O(1)访问性能的内部数组支持。List不使用linkedlist实现。 关于c#-List.Item属性如何为O(1)?打字
使用Moq,我希望能够验证传递给模拟方法调用的参数是否满足某些条件。在这种情况下,我想检查传递给模拟方法的列表是否具有特定大小:varmockSomeRepository=newMock();mockSomeRepository.Setup(m=>m.Write(It.IsAny>())).Verifiable();varmainClass=newMainClass(mockSomeRepository.Object);ListsomeList=GetListWith25Items();mainClass.DoRepositoryWrite(someList);//callsSomeR
privateListnewList;publicListNewList{get{returnnewList;}set{newList=value;}}我想创建这样的东西,但这行不通。这只是一个演示我的目标的例子,因为为string和int甚至T创建属性是很常见的,但我从未见过List属性是否有可能做这样的事情,为类型List创建一个属性?编辑我有一个具有普通属性(字符串属性、int属性等)的普通类,但我有一个存储用户选项的属性,所以在表示层上我必须将它们转换为字符串,这样我才能将它们存储在对象中。现在是否有可能拥有一个List类型的属性,以更好、更干净的方式存储多值,而不是将信息转换
我的C#程序根据给定的模式生成随机字符串。这些字符串存储在一个列表中。由于不允许重复,我这样做是这样的:ListmyList=newList();for(inti=0;i正如您想象的那样,这对数百个条目都适用。但我面临着生成数百万个字符串的情况。随着每个添加的字符串检查重复项变得越来越慢。有没有更快的方法来避免重复? 最佳答案 使用可以更有效地确定项目是否存在的数据结构,即HashSet。它可以在常数时间内确定一个项目是否在集合中,而不管集合中的项目有多少。如果您真的需要List中的项目,或者您需要结果列表中的项目按照它们生成的顺序