草庐IT

应不应该

全部标签

c# - 我应该避免使用依赖注入(inject)和 IoC 吗?

在我的中型项目中,我为存储库、服务等使用了静态类,它实际上工作得很好,即使大多数程序员的期望相反。我的代码库非常紧凑、干净且易于理解。现在我尝试重写所有内容并使用IoC(控制反转),但我非常失望。我必须在每个类、Controller等中手动初始化许多依赖项,为接口(interface)添加更多项目等等。我真的没有看到我的项目有任何好处,而且似乎它造成的问题多于解决的问题。我在IoC/DI中发现了以下缺点:更大的代码量馄饨代码而不是意大利面条代码性能较慢,即使我要调用的方法只有一个依赖项,也需要在构造函数中初始化所有依赖项不使用IDE时更难理解一些错误被推送到运行时添加额外的依赖(DI框

c# - 处理只读 List<T> 成员时应该如何使用属性

当我想在我的类之外将值类型设置为只读时,我会这样做:publicclassmyClassInt{privateintm_i;publicinti{get{returnm_i;}}publicmyClassInt(inti){m_i=i;}}我该怎么做才能制作List在我的类(class)之外输入只读(这样他们就不能在其中添加/删除元素)?现在我只是宣布它公开:publicclassmyClassList{publicListli;publicmyClassList(){li=newList();li.Add(1);li.Add(2);li.Add(3);}}

c# - 在教新开发人员时,我应该从单元测试开始吗?

关闭。这个问题是opinion-based.它目前不接受答案。想改善这个问题吗?更新问题,以便可以通过editingthispost用事实和引文回答问题.8年前关闭。Improvethisquestion我目前正在使用.Net3.5中的Silverlight、WCF、EnterpriseLibrary、Unity、LinqToSql、NUnit、RhinoMocks等技术进行项目我正在培训一个新的开发人员,他对VB脚本和SQL有一定的经验,但没有接触过.Net几乎100%的代码库都有单元测试覆盖率,但似乎让新开发人员开始编写单元测试太多了,有足够的东西让他了解,而不会增加单元测试和模拟

c# - 用例来理解为什么字符串列表应该被声明为只读

我试图了解哪些用例需要我将List声明为ReadOnly类型。与此相关的一个问题是:在实例化列表时分配了多少内存? 最佳答案 将字段标记为readonly的主要原因是为了让您知道常规代码不能交换列表引用。一个可能重要的关键场景是,如果您有其他代码在使用lock(theListField)对列表执行同步的类型中。.显然,如果有人交换列表实例:事情就会崩溃。请注意,在大多数具有列表/集合的类型中,预计不会更改实例,因此readonly断言这种期望。一个常见的模式是:privateList_items=newList();publicLi

c# - 异常消息是否应该全局化

我正在做一个项目,我刚刚开始做所有必要的工作来全局化应用程序。经常出现的一件事是是否全局化异常消息,但确保string.Format使用CultureInfo.CurrentCulture而不是CultureInfo.InvariantCulture。此外,这意味着异常消息将存储在可标记为特定于文化的资源文件中。所以问题是,异常消息应该全局化还是应该留在InvariantCulture或作者所在的国家;在我的例子中是en-US。 最佳答案 异常消息应该很少直接显示给用户。您需要考虑每个字符串的使用者。显然,用户界面中的文本片段需要国

c# - 我应该在 Entity Framework 模型中使用 int 还是 long 作为主键

我正在编写MVC5Internet应用程序,我对模型的id字段有疑问。我应该使用int还是long作为模型中的id?我说的是用于主键的字段?如果数据库有100,000条记录,一个int就足够了吗?c#中的int与SQL数据库中的int不同吗?提前致谢 最佳答案 对于INT类型,从1开始,您将获得超过20亿可能的行-这对于绝大多数情况来说应该绰绰有余。使用BIGINT,您可以获得大约922千万亿(922有15个零-922'000亿)-对您来说足够了吗??如果您使用从1开始的INTIDENTITY,并且您每秒插入一行,全天候,您需要66

C# 我应该引发什么样的异常?

我目前正在trycatch中查找属性是否已正确设置为应该像这样的bool值...publicvoidRunBusinessRule(MyCustomTypecustomType){try{if(customType.CustomBoolProperty==true){DoSomething();}else{thrownewException("Thisisobviouslyfalseorpossiblynullletsthrowupanerror.");}}catch(Exception){throw;}}现在对我抛出这个错误的处理是我正在使用微软的源代码分析,它给了我一个错误,指出“

c# - 我应该如何在 C# 中使用属性?

我不确定,因为在Java中,getter/setter看起来有点不同,但是编写这些东西的“c#方式”是什么?选项a.)privatestringname;publicstringName{get{returnname;}set{name=value;}}privateinttime;publicintTime{get{returntime;}set{time=value;}}b.)privatestring_name;privateint_time;publicstringname{get{return_name;}set{_name=value;}}publicinttime{get

c# - 我应该使用哪种返回方式?

这与C#中使用的约定有关。我有一个方法有两个参数(X和Y坐标)。这些坐标表示“瓦片”可能驻留的位置。如果图block位于这些坐标处,则该方法返回其编号。如果这些坐标上没有图block,我想知道该方法应该如何运行。我看到三个选项:使用异常(exception)。每次方法找不到图block时,我可能会引发异常。但是,由于这种情况并不少见,因此此选项是最糟糕的选项。以老式的C++方式执行此操作,如果没有磁贴则返回-1。将瓦片编号作为引用参数并将方法的返回类型更改为bool值以显示是否有瓦片。但这对我来说似乎有点复杂。那么,我该怎么办呢? 最佳答案

c# - StartsWith 应该只用于订购吗?

我正在阅读Microsoft的BestPracticesforUsingStringsinthe.NETFramework.它给出了以下示例作为对StringComparison.OrdinalIgnoreCase的介绍:publicstaticboolIsFileURI(stringpath){returnpath.StartsWith("FILE:",StringComparison.OrdinalIgnoreCase);}到目前为止,还不错。但它接着说:However,theprecedingexampleusestheString.StartsWith(String,Strin