Questions tagged «c#»

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

9
LINQ样式首选项[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我每天都在编程中经常使用LINQ。实际上,我很少(如果有的话)使用显式循环。但是,我发现我不再使用类似SQL的语法。我只是使用扩展功能。所以宁愿说: from x in y select datatransform where filter 我用: x.Where(c => filter).Select(c => datatransform) 您更喜欢哪种LINQ风格,团队中的其他人对此感到满意?
21 c#  coding-style  linq 

16
C#开发人员每月可以生产多少行代码?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我工作场所的一位高管向我和开发人员小组提问: C#开发人员每月可以生产多少行代码? 一个旧的系统将被移植到C#中,他希望此措施成为项目计划的一部分。 从某些(显然是可信的)消息来源,他得到的答案是“ 每月 10 SLOC ”,但他对此并不满意。 该小组同意这几乎是不可能的,因为这取决于一长串情况。但是我们可以断定,如果我们没有给出更适合他的答案,那个人就不会离开(或者对我们非常失望)。因此他留下了更好的答案:“ 每天 10 SLOC ” 这个问题可以回答吗?(立即使用,甚至进行一些分析)

11
您使用哪个持续集成框架,为什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 有很多不同的持续集成(CI)框架,我想知道哪种框架最受欢迎。您在您所在的公司使用了哪些框架? 是否有任何理由使一个CI框架比其他CI框架更受欢迎-也许与它提供的功能,集成到其中的东西有关? 似乎在Java和.net世界中使用持续集成比使用ruby或python要多。为什么是这样?

9
如何为新程序员讲授异常处理?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 您如何向程序员讲授异常处理。轻松教授所有其他内容-数据结构,ASP.NET,WinForms,WPF,WCF-您可以轻松地讲授所有内容。 使用异常处理,最终对它们进行尝试尝试只是异常处理的语法性质。 但是,应该教的是-您将代码的哪一部分放在try块中?你在赶路区做什么? 让我用一个例子来说明。 您正在处理Windows Forms Project(一个小型​​实用程序),并且已按照以下3个不同的项目进行了设计。 UILayer 业务层 数据层 如果在DataLayer上引发了异常(让我们说加载XDocument会引发异常)(UILayer调用BusinessLayer,而BusinessLayer依次调用DataLayer),您是否只需执行以下操作 //In DataLayer try { XDocument xd_XmlDocument = XDocument.Load("systems.xml"); } catch(Exception ex) { throw ex; } 哪些再次在BusinessLayer中引发,哪些在UILayer中捕获,在那里我将其写入日志文件? 这是您进行异常处理的方式吗?

10
设置电子邮件通知的最佳做法和礼节
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 如果您要为网站的客户设置电子邮件警报以进行订阅,则应遵循哪些礼节规则? 我能想到的几个问题: 用户可以选择退出 纯文字(或高雅的远程图像) 每周发送不超过一次 客户可以对其收到的电子邮件进行细粒度的控制(仅接收他们感兴趣的内容) 我还应该考虑什么? 从编程的角度来看,设置和运行电子邮件通知的最佳方法是什么? 我应该使用ASP.NET服务吗?Windows服务?两者都有什么陷阱? 我应该如何记录发送的电子邮件?我不在乎是否会收到邮件,但我确实需要能够证明自己已发送或未发送电子邮件。

2
谁先进行了异步/等待?
Python在2015年在3.5中添加了async / await构造。Javascript社区朝着它迈进了一大步,并在2017年发布的ES8草案中增加了非常相似的实现(据我了解)。Typescript在2015年的1.7版中还添加了异步方法,使未经训练的人看起来完全像js异步方法。 C#在2012年添加了异步方法,这些方法看起来与async / await的所有其他实现类似,并且基于F#的行为类似但外观不同的异步工作流,该工作流于2010年在F#2.0中引入。这是我所知道的最早关于异步编程语言的示例-具有异步/等待对的C#和具有异步流的F#。 是否有较早的示例在此上下文中将关键字用作语言构造(或库)?从我有限的信息来看,似乎每个人都模仿了C#实现的优秀部分,但是C#是否从其他人那里复制了它呢?

4
以函数为参数的函数是否还应该以那些函数的参数为​​参数?
我经常发现自己编写的函数看起来像这样,因为它们使我可以轻松地模拟数据访问,并且仍然提供一个接受参数的签名来确定要访问的数据。 public static string GetFormattedRate( Func<string, RateType>> getRate, string rateKey) { var rate = getRate(rateKey); var formattedRate = rate.DollarsPerMonth.ToString("C0"); return formattedRate; } 要么 public static string GetFormattedRate( Func<RateType, string> formatRate, Func<string, RateType>> getRate, string rateKey) { var rate = getRate(rateKey); var formattedRate = formatRate(rate); return formattedRate; } 然后我用它像这样: using FormatterModule; …

3
通过源代码访问来管理内部NuGet软件包
我们有很多内部库,我们希望在公司内部的项目之间共享。这些是一些要求: 库资源存储在与最终项目分开的存储库中 最终项目包括通过NuGet提供的库 在进行最终项目时,必须有可能轻松检查任何给定库的源代码 设置我们的私有NuGet存储库不是问题,但是管理源代码是有问题的。我们试图通过暴露源服务器的来源和它还挺作品,但并不完全:VS下载源在调试外部代码,而不是当你尝试导航到定义/实施。基本上,您只能在调试时使用源代码,这不是我们所需要的。 因此,问题是: 有哪些方法可以提供对内部库源代码的访问权限,而无需将代码放在同一存储库/解决方案中 有没有办法设置Symbol服务器/ NuGet feed组合,以便VS使用符号进行导航,而不仅仅是调试? 选择使用ReSharper /其他加载项。

1
您的代码中处理复数形式的标准是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 当使用其复数和单数都相同的变量时,如何命名它们?有没有什么标准? 例如: Series[] series // Plural Series series // Singular 深入: 具体来说,我的系列集合需要称为系列(由于JSON格式),您是否考虑命名要添加到集合中的系列的单数形式Series s? 如: List<Series> series = new List<Series>(); Series s; while (someBool) { s = new Series(); s.Name = "Name"; while (anotherBool) { s.AddValue(someValue); } series.Add(s); }


3
泛型与通用接口?
我不记得上次写泛型类的时间。每次经过思考后我都认为不需要时,我认为不需要它。 这个问题的第二个答案让我要求澄清(因为我还不能发表评论,所以我提出了一个新问题)。 因此,让我们以给定的代码为例,说明需要泛型的情况: public class Repository<T> where T : class, IBusinessOBject { T Get(int id) void Save(T obj); void Delete(T obj); } 它具有类型约束: IBusinessObject 我通常的想法是:该类只能使用IBusinessObject,使用该类的也是如此Repository。存储库存储这些对象IBusinessObject,最有可能的客户端Repository将希望通过IBusinessObject接口获取和使用对象。那为什么不只是为了 public class Repository { IBusinessOBject Get(int id) void Save(IBusinessOBject obj); void Delete(IBusinessOBject obj); } 那个例子不好,因为它只是另一种类型的集合,而通用集合是经典的。在这种情况下,类型约束看起来也很奇怪。 实际上,该示例class Repository<T> where T : class, IBusinessbBject与class BusinessObjectRepository我非常相似。泛型是要修复的东西。 重点是:泛型除了集合之外,是否对其他任何东西都有用,并且类型约束不会使泛型成为专用对象,就像使用类约束而不是在类内部使用泛型类型参数一样?

7
给带有“ Info”后缀的类命名的想法是什么,例如:“ SomeClass”和“ SomeClassInfo”?
我正在一个处理物理设备的项目中工作,而在如何正确命名该项目中的某些类方面一直感到困惑。 考虑到实际的设备(传感器和接收器)是一回事,而它们在软件中的表示是另一回事,我正在考虑使用“ Info”后缀名称模式命名某些类。 例如,虽然a Sensor是代表实际传感器的类(当它实际上连接到某个工作设备时),但SensorInfo将仅用于代表此类传感器的特性。例如,保存文件后,我将序列化为SensorInfo文件头,而不是序列化Sensor,这甚至都没有道理。 但是现在我很困惑,因为在对象生命周期中存在一个中间立场,我无法决定是否应该使用一种或另一种,或者如何从另一种中获取一种,甚至不能将这两种变体实际上只折叠为一个类。 而且,太普遍的示例Employee类显然只是真实人物的表示,但EmployeeInfo据我所知,没有人会建议为该类命名。 我使用的语言是.NET,这种命名模式在整个框架中似乎很常见,例如这些类: Directory和DirectoryInfo班级; File和FileInfo班级; ConnectionInfo班级(无对应Connection班级); DeviceInfo班级(无对应Device班级); 所以我的问题是:使用这种命名模式是否有共同的理由?在某些情况下,具有成对的名称(Thing和ThingInfo)是否有意义,而在其他情况下,仅应存在ThingInfo该类,或者Thing该类没有对应物?

6
“撤消”整数环绕
几年前,我遇到了一个有趣的理论问题。我从未找到解决方案,当我睡觉时,它仍然困扰着我。 假设您有一个(C#)应用程序,该应用程序在一个称为x的int中保存一些数字。(x的值不固定)。运行该程序时,x乘以33,然后写入文件。 基本的源代码如下所示: int x = getSomeInt(); x = x * 33; file.WriteLine(x); // Writes x to the file in decimal format 几年后,您发现需要X的原始值。一些计算很简单:只需将文件中的数字除以33。但是,在其他情况下,X足够大,以至于乘法运算导致整数溢出。根据文档,C#将截断高阶位,直到数字小于int.MaxValue。在这种情况下,是否可以: 恢复X本身或 恢复X的可能值的列表? 在我看来(尽管我的逻辑肯定有缺陷)应该可行,其中之一或两者都可行,因为加法的简单情况有效(本质上,如果您将X加10并自动换行,则可以减去10再用X结束),而乘法就是重复的加法运算。我相信,在所有情况下X都乘以相同的值(常数33)也是有帮助的(我相信)。 多年来,这一直在我的头颅周围跳舞。它会发生在我身上,我将花一些时间尝试思考它,然后我会忘记几个月。我已经厌倦了追逐这个问题!谁能提供见识? (旁注:我真的不知道如何标记这一标记。欢迎提出建议。) 编辑:让我澄清一下,如果我可以获得X的可能值的列表,则可以做其他测试来帮助我将其范围缩小到原始值。
20 c# 

7
从VBA到C#的团队成员质疑
背景 去年,我被要求为大约10个用户创建一个用于业务计划的工具。这项工作是由另一个IT团队代表完成的,该团队将工作“分包”给我,并且由于项目期限在他们这边有些计划外,我不得不匆忙实施。 当时,我们决定最快的方法是使用VBA创建Excel工作簿,然后让用户从Intranet下载此VBA增强的工作簿以在其PC上使用。在这种情况下,Excel是一个约束,因为我们使用的计划系统(即数据库)只能通过Excel加载项进行交互,该加载项必须在打开计划工作簿的同时加载。但是,当时VBA并不是一个约束。 我创建了约4,000行VBA代码的工作簿,虽然我尝试分离数据层和表示层,但由于项目截止日期,所以在所有情况下都无法做到。老实说,虽然我为创建此工作簿感到自豪,但同时我感到有些失望,因为它在编码和部署到用户方面都可以做得更好。 今天 回到今天,IT团队再次来找我,要求提供类似的工作簿(这样我就可以重用上面其他工作簿的部分内容),但这一次它变得更加复杂,将被更多的用户使用( 200左右)。 但是,这次的计划要好一些,我可以看到我们有更多的时间来计划事情。基于此,我考虑了该解决方案和基础架构,因为针对100个用户的编程比对10个用户的编程影响更大。因此,我向团队建议,也许我们应该考虑将现有代码迁移到C#解决方案,以便我们可以以更精细的方式管理代码。我仍将其视为使用VSTO / Excel-DNA编写的加载项,然后可以将其部署到用户。 两周前,我与IT团队讨论了这一问题,一切似乎都很好,直到昨天,我收到一个团队(不了解VBA或C#)的邮件,询问我们为什么应该在C#中启动这个新项目,而不是使用与以前相同的方法。他们的一些担忧是: 这是一个非常重要的项目,因此它必须能够工作-C#解决方案不能像现有的基于VBA的解决方案那样稳定或有效。 我们将不得不舍弃[I]在VBA解决方案中所做的事情,并在C#中从头开始重新创建它。 有人必须支持两种单独的解决方案,一种在VBA中,一种在C#中。[实际上,他们目前没有任何人支持,我通常会介入]。 现在,我可以在某种程度上理解他们的一些担忧,但是我需要决定下一步的工作以及如何处理这些问题。就个人而言,我想用C#实施,因为我认为它更适合于构建这样的“企业”解决方案。此外,我想借此机会提高我的C#技能,因为我目前不像VBA那样胜任C#的能力,并且我希望通过这样的项目将我带入“下一个级别”。 我准备了一些要点,可以用来说服他们说C#解决方案更适合该项目,这是我到目前为止的目标: 单元测试。 源代码控制。 代码文档-用于将知识转移给其他支持人员。 更好的编码约定-可以使用ReSharper之类的东西来加强更好的命名和结构。 更好的IDE-减少由于错误突出显示而导致的错误。 通过组件实现更高的模块化-可以促进将来工具的重用。 托管部署-可以控制使用此工具的人员。 问题:我还能说些什么来说服他们?还是我想尽全力去完成这个项目?我应该保持安静,还是在VBA中这样做吗? 我知道,仅因为新语言的“较新”或被视为“较凉爽”而改用新语言就不应作为决策的基础,因此我拒绝将其作为决策要点-这是关于事实的。 另外,我不要求在C#和VBA作为语言之间进行字面比较,因为在SO上有很多比较。

3
TDD和重构遇到的困难(或者-为什么这比应该的要痛苦得多?)
我想教自己使用TDD方法,而我有一个项目想要工作一段时间。这不是一个大项目,所以我认为这将是TDD的不错的选择。但是,我感觉有些不对劲。让我举个例子: 在较高级别上,我的项目是Microsoft OneNote的加载项,它使我可以更轻松地跟踪和管理项目。现在,如果我决定建立自己的自定义存储和后端的一天,我还希望保持与OneNote分离的业务逻辑。 首先,我从一个基本的普通单词接受测试开始,概述了我希望我的第一个功能要做的事情。看起来像这样(为简洁起见,将其复制): 用户点击创建项目 用户输入项目标题 验证项目创建正确 跳过UI内容和一些中介计划,我来进行第一次单元测试: [TestMethod] public void CreateProject_BasicParameters_ProjectIsValid() { var testController = new Controller(); Project newProject = testController(A.Dummy<String>()); Assert.IsNotNull(newProject); } 到目前为止,一切都很好。红色,绿色,重构等。现在它实际上需要保存内容。在这里减少一些步骤,我对此很满意。 [TestMethod] public void CreateProject_BasicParameters_ProjectMatchesExpected() { var fakeDataStore = A.Fake<IDataStore>(); var testController = new Controller(fakeDataStore); String expectedTitle = fixture.Create<String>("Title"); Project newProject = testController(expectedTitle); Assert.AreEqual(expectedTitle, newProject.Title); } …

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.