Questions tagged «c#»

C#是Microsoft与.NET平台并行创建的一种多范式,托管的,垃圾回收的面向对象编程语言。

4
单元测试要走多远
之前曾多次问过一个问题,但twds mvc开发有特定的倾向。 我一直是一个非常好的男孩,并且一直用相应的单元测试来编码我的所有控制器动作,这非常好(如果有时[读很多]重复的话)。老实说,我实际上已经创建了一个T4模板来编写初始单元测试的大部分裸露的骨骼,然后根据使用情况进行适当的调整。我承认我不太确定如何在包含局部视图的视图中处理测试-但这是另一个问题。 现在,我难以决定的部分就是服务层应该覆盖的深度。原因是我的某些服务方法(无论好坏)实际上执行各种linq查询,然后将谨慎的信息提供给方法中的后续逻辑。我知道我可以(应该??)分解这些方法,以便仅为每个linq语句调用所需的逻辑,然后将其应用到该方法中。但是,在许多情况下,永远不会重复使用linq'functions',因此感觉这会将代码重构的程度过高。 我要问的是,在方法中发生复杂的逻辑时,是否有一种“足够好”的测试方法来简单地声明所需的结果和/或预期的错误,或者是否应该同时模拟和测试每条逻辑线。按照我的观察方式,正确进行测试,然后方法逻辑(逐行)也应具有某种覆盖率。但是(以我的幼稚观点),这可能导致试图保持测试和所实施的方法如此紧密一致(我知道他们应该如此)以至于在测试本身中创建家庭行业的循环永无止境。 我知道我的问题可能会激怒TDD的一些奉献者,他们会认为这是毫无道理的。不在TDD阵营中,这对我来说是“是明智的选择”,因此是一个问题。 顺便说一句-检查了这个想法: http://dotnetslackers.com/articles/aspnet/Built-in-Unit-Test-for-ASP-NET-MVC-3-in-Visual-Studio-2010-Part-1.aspx 现在展望稳步下降:) [编辑] -为单身人士(现在是单身!)的“亲密”选民提供好处。这个问题不是主观的。我正在寻找一个非常集中的主题的共识。我不是想激起负面的热情,我不是要揭露技术的缺陷-我是一个巨大的粉丝。因此,请在投票结束时发表有礼貌的评论,以使我受益,因为如果有歧义或错误信息,这可能有助于我重新构造问题。这个问题可能会使大部分的mvc受益。 谢谢!! 吉姆
11 c#  .net  asp.net-mvc 

9
有关代码文档生产率收益/损失的研究
经过大量搜索,我未能回答与软件开发领域中已知的假设有关的基本问题: 什么是已知的: 对足够的代码文档(无论是Doxygen标记,Javadoc还是仅仅是大量注释)实施严格的政策,都会增加开发代码所需的时间。 但: 拥有详尽的文档(甚至API),可以在新手和经验丰富的开发人员添加功能或修复bug时带来生产率的提高(有人认为)。 问题: 保证此类文档所需的额外开发时间是否能被下游生产率的提高(从严格的经济意义上来说)所抵消? 我正在寻找案例研究或答案,可以带给他们客观的证据来支持得出的结论。 提前致谢!


10
我如何向非程序员解释.NET是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我不在软件公司工作,并且是公司中一小部分对编程一无所知的人之一。我花了大量时间来自动化通过公共API在办公室使用的其他程序,并且我还创建了一些独立的应用程序。我几乎完全在C#.NET中工作,因为我们似乎在办公室使用的每个应用程序似乎都有某种形式的.NET API。 我这里有些人问我关于学习“如何编程”以及应该从哪里开始的知识。我认为学习.NET语言更加有意义,因为几乎他们想要自动化的所有程序都具有.NET API,而且听起来VBA即将退出,并被VSTA取代。 但是,我试图弄清楚如何解释.NET以及为什么他们应该向对编程一无所知的人学习。它不是真正的语言,因为有许多语言被认为是.NET语言。另外,我认为“ .NET”和“ .NET框架”之间存在区别,因为后者更多地与Microsoft提供的库有关。

4
如何包装服务,使其更简单
我们依赖于第三方服务,该服务公开了一个巨大的接口,我们只需要像3种方法。此外,界面经常更改... 我决定将接口包装在我们项目的一个类中,只公开我们需要的方法。 但是我不确定如何处理返回值...接口返回类型为的对象Storage。我们内部有一个类型StorageModel,它是a的内部表示形式Storage。 您将在映射器中返回什么:Storage或StorageModel?我们有一个DataService StorageService,它获得了注入的包装的依赖关系。 目前,我基本上是这样的: public class StorageService { private readonly IExternalStorageWrapper externalStorageWrapper; public StorageService(IExternalStorageWrapper externalStorageWrapper) { this.externalStorageWrapper = externalStorageWrapper; } public StorageModel GetStorage(int storageId) { return this.externalStorageWrapper.GetStorage(storageId).ConvertToStorageModel(); } } public class ExternalStorageWrapper : IExternalStorageWrapper { public Storage GetStorage(int storageId) { using(var ext = new ExternalStorage()) { return ext.GetStorage(storageId); …

4
标记通过反射调用的方法的最佳实践?
我们的软件有几个类,应该通过反射来动态找到。这些类都有一个带有特定签名的构造函数,反射代码通过该签名实例化对象。 但是,当有人检查是否引用了该方法时(例如,通过Visual Studio Code Lens),则不计入通过反射进行的引用。人们可能会错过他们的引用,并删除(或更改)表面上未使用的方法。 我们应该如何标记/记录打算通过反射调用的方法? 理想情况下,应以同事和Visual Studio / Roslyn以及其他自动化工具都“看到”该方法旨在通过反射调用的方式进行标记。 我知道我们可以使用两个选项,但都不太令人满意。由于Visual Studio找不到引用,因此: 使用自定义属性,并使用此属性标记构造函数。 问题在于,属性属性不能是方法引用,因此构造方法仍将显示为具有0个引用。 不熟悉custom属性的同事可能会忽略它。 我当前方法的一个优点是反射部分可以使用该属性来查找应调用的构造函数。 使用注释来证明打算通过反射调用方法/构造函数。 自动化工具会忽略评论(同事也可能会忽略评论)。 XML文档注释可以用于具有Visual Studio计数的额外参考方法/构造: 让MyPlugin是它的构造经由反射调用的类。假设调用反射代码搜索采用int参数的构造函数。以下文档使代码透镜显示了具有1个引用的构造函数: /// <see cref="MyPlugin.MyPlugin(int)"/> is invoked via reflection 存在哪些更好的选择? 标记要通过反射调用的方法/构造函数的最佳实践是什么?

2
在MVVM中,ViewModel或View应该负责创建新视图吗?
在我的WPF应用程序中,我想创建一个新视图。在ViewModel或Model中应该在哪里做? 该应用程序是一个(现在非常简单)单窗口形式的工具,带有单个“发送”按钮。如果选中其中一个复选框,则应弹出使用相同ViewModel的新窗口,要求用户提供一些其他详细信息。出于这个问题的目的,我们只考虑新窗口方法,而不考虑显示/隐藏面板之类的其他方法。 理想情况下,在View中应该没有任何代码。此外,由于View中没有任何逻辑,因此VM最初需要检查是否需要创建新视图,并且-在需要时-将这种责任退还给View,从而导致代码膨胀。 另一方面,在ViewModel中创建新视图违反了ViewModel不应该了解View的原则。 因此,在View或ViewModel中创建新视图更好吗?
11 c#  design  wpf  mvvm 

4
在布尔表达式中使用空条件运算符的最佳方法
您正在编写一个布尔表达式,可能看起来像这样: team.Category == "A Team" && team?.Manager?.IsVietnamVet public class Manager { public bool IsVietnamVet { get; set; } } public class Team { public string Category { get; set; } public Manager Manager { get; set; } } ...而您得到一个错误: 运算符'&&'不能应用于类型'bool'和'bool?'的操作数 最佳/最干净的处理方式是什么? team.Category == "A Team" && (team?.Manager?.IsVietnamVet ?? false) 这真的可读吗? …
11 c# 

4
减少类中通过组合实现接口的样板
我有一个类:A这是一个综合了一些更小的类,的B,C和D。 B,C和D实现接口IB,IC和ID分别。 由于A支持的所有功能B,C并且D,A器具IB,IC并ID为好,但不幸的是这导致了大量的重路由在执行A 像这样: interface IB { int Foo {get;} } public class B : IB { public int Foo {get {return 5;}} } interface IC { void Bar(); } public class C : IC { public void Bar() { } } interface ID { string Bash{get; set;} } public …

2
在哪里为我的班级建立公共数据库连接
我有几个类(资源库),它们负责在数据库中保存/检索某些对象的任务。它们都需要与一个数据库建立连接。 我认为为了避免在每个类中重新定义ConnectionString和SqlConnection,将开放的连接传递给它们。那么定义/打开该连接并将其传递给类的最佳位置/时间在哪里/何时? 是否有更好的方法/模式可以访问此公共资源?
11 c#  sql  class-design 

6
出于隐藏成员的唯一目的而使用显式接口实现的充分理由是什么?
在对C#的复杂性进行的一项研究中,我遇到了有关显式接口实现的有趣文章。 While this syntax is quite helpful when you need to resolve name clashes, you can use explicit interface implementation simply to hide more "advanced" members from the object level. 对我没有经验的眼睛来说,允许使用object.method()或要求强制转换之间的区别((Interface)object).method()似乎是卑鄙的迷惑。文中指出,这将隐藏智能感知对象级别的方法,但为什么你会想这样做,如果没有必要,以避免名称冲突?
11 c#  design  interfaces 

12
是否有支持在Mac上本地运行.NET 4.0应用程序的方法?
Microsoft在Mac上原生运行C#/。NET 4.0代码的受支持的选项是什么(如果有)?是的,我知道Mono,但除其他外,它落后于Microsoft。而且Silverlight仅在Web浏览器中有效。VMWare类型的解决方案也不会削减它。 关于Microsoft为什么不直接在Mac本身上支持.NET的问题,是否有半权威性的答案?似乎他们可以Silverlight和/或购买Mono并很快就在那里。无需本地Visual Studio;交叉编译和远程调试很好。 原因是在我工作的地方,对未来的不确定性越来越大,这导致用C ++而不是C#进行更多开发。全新的项目正在选择使用C ++。从现在起18到24个月没有人告诉管理层“抱歉”,如果Mac(或iPad)成为必需品。C ++被视为更安全的选择,即使它(可以说)意味着当今生产力的下降。
11 c#  .net  mac  mono 

4
命名空间中的类数-代码气味?
我有一个C#库,该库由多个可执行文件使用。库中只有几个命名空间,我只是注意到其中一个命名空间中包含许多类。由于分类,我总是避免在单个名称空间中包含太多的类,并且因为在潜意识里,我认为具有更深层次的名称空间层次结构看起来“更漂亮”。 我的问题是:当一个命名空间具有许多类时,即使这些类彼此相关,是否有人将其视为“代码气味”?您是否会花大力气在允许子分类的类中找到细微差别?
11 c#  count  namespace 

8
平衡信息异常和干净代码的好方法是什么?
使用我们的公共SDK,我们倾向于提供非常有用的消息,说明为什么发生异常。例如: if (interfaceInstance == null) { string errMsg = string.Format( "Construction of Action Argument: {0}, via the empty constructor worked, but type: {1} could not be cast to type {2}.", ParameterInfo.Name, ParameterInfo.ParameterType, typeof(IParameter) ); throw new InvalidOperationException(errMsg); } 但是,由于倾向于将重点放在错误消息而不是代码在做什么,这往往会使代码流变得混乱。 一位同事开始重构一些引发如下异常的异常: if (interfaceInstance == null) throw EmptyConstructor(); ... private Exception EmptyConstructor() …

3
不直观的C#String.Split()实现的原因
在C#中,如果我想将a分开string,string则必须执行以下操作: testString.Split(new string[] { "anotherString" }, StringSplitOptions.None); 从过载的String.SplitMSDN文档中,我们可以看到实现以及为什么必须进行这样的调用。 来自Python,我很难正确理解为什么需要这样的调用。我的意思是我可以Regex.Split用来获得与Python实现类似的语法,但是对于任何简单的事情,我都必须以降低性能(设置时间)为代价来实现。 因此,基本上,我的问题是,为什么我们不能做这样的事情: testString.Split("anotherString"); 请注意,我不建议任何原型或实现。我了解,考虑到当前的API,为什么您无法实现上述版本。我的目标是考虑到上述语法带来的好处,为什么要创建这样的API。到目前为止,灵活性似乎已成为当前潮流的目标String.Split,但老实说,我确实认为在某种程度上可以提高性能。我想我错了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.