Questions tagged «c#»

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

19
#region是反模式或代码气味吗?
C#允许使用#region/ #endregion关键字使代码区域在编辑器中可折叠。每当我这样做时,我都会隐藏可能会重构为其他类或方法的大量代码。例如,我见过一些方法,其中包含500行代码以及3或4个区域,只是为了使其易于管理。 那么明智地使用区域是否会带来麻烦呢?对我来说似乎是这样。
264 c#  code-smell 

9
为什么许多异常消息不包含有用的详细信息?
似乎在一定程度上同意异常消息应包含有用的细节。 为什么系统组件中的许多常见异常不包含有用的详细信息? 一些例子: .NET List索引访问ArgumentOutOfRangeException并没有告诉我这是尝试和无效的索引值,也不会告诉我的允许范围。 基本上,来自MSVC C ++标准库的所有异常消息都是完全无用的(与上述相同)。 甲骨文例外.NET,告诉你(意译)“表或视图未找到”,但没有哪一个。 因此,在我看来,在大多数情况下,异常消息没有包含足够有用的细节。我的期望与众不同吗?我是否使用异常错误而我甚至注意到了这一点?或者,也许我的印象是错误的:大多数的异常都实际提供有用的信息?
220 c#  c++  exceptions 

5
什么时候使用结构而不是类?[关闭]
您何时使用结构与类的经验法则是什么?我正在考虑这些术语的C#定义,但是如果您的语言具有类似的概念,我也想听听您的意见。 我倾向于对几乎所有东西使用类,并且仅在某些东西非常简单并且应该是值类型(例如PhoneNumber或类似的东西)时才使用structs。但这似乎是一个相对较小的用途,我希望有更多有趣的用例。
174 c#  design  class  struct 

6
SOLID原则和代码结构
在最近的一次工作面试中,除了提供各种原理的基本含义之外,我无法回答有关SOLID的问题。这真的让我很烦。我做了几天值得深入研究的工作,但还没有得出令人满意的总结。 面试问题是: 如果您要看一个我严格遵循SOLID原则的.Net项目,那么您期望在项目和代码结构方面看到什么? 我挣扎了一下,没有真正回答问题,然后轰炸了。 我如何更好地处理这个问题?
149 c#  .net  solid 

8
您如何组织项目?[关闭]
您是否有任何特殊的组织项目风格? 例如,目前我正在为玻利维亚的几所学校创建一个项目,这是我的组织方式: TutoMentor (Solution) TutoMentor.UI (Winforms project) TutoMentor.Data (Class library project) 您如何精确地组织项目?您是否有自己组织并为之自豪的事例?您可以共享“解决方案”窗格的屏幕截图吗? 在我的应用程序的UI区域中,我无法确定一个好的架构来组织不同的表单及其所属位置。 编辑: 如何在.UI项目中组织不同的形式?我应该在哪里/如何分组其他形式?将它们全部置于项目的根目录是一个坏主意。

7
C#、. NET,ASP,ASP.NET等之间的关系
我真的不清楚C#,C#.NET与ASP和其他“ .NET”语言的区别。 据我了解,.NET是...事物的库/框架。我认为他们本质上是在访问Windows数据,例如表单元素等,但这似乎不适用于ASP.NET。 另外,我看到人们称自己为“ .NET”开发人员。这是否意味着他们精通C#,ASP和其他语言? 最后,我从来没有看到没有附加.NET的C#。C#是否与.NET紧密地联系在一起,否则无法使用? 总结:.NET到底提供了什么?它与C#和ASP等有什么关系?“ .NET开发人员”是什么意思?最后,为什么没有.NET就永远看不到C#? [顺便说一句,我意识到这些是多个问题,但是我认为它们之间是非常相关的(或者至少是浏览Programmers / SO等给我的印象))。
143 c#  .net  asp.net 

16
我是否应该现在添加冗余代码,以防将来可能需要?
对与错,我目前认为我应该始终尝试使我的代码尽可能地健壮,即使这意味着添加我知道现在将无用的冗余代码/检查,但是它们可能是下线的x年。 例如,我目前正在开发具有以下代码的移动应用程序: public static CalendarRow AssignAppointmentToRow(Appointment app, List<CalendarRow> rows) { //1. Is rows equal to null? - This will be the case if this is the first appointment. if (rows == null) { rows = new List<CalendarRow> (); } //2. Is rows empty? - This will be the case if …

3
结构化日志记录与基本日志记录的优点
我们正在构建一个新的应用程序,我想包括结构化日志记录。我理想的设置应该是SerilogC#代码和BunyanJS。fluentd我最初想到的是,这些东西会进入然后可能会涉及到许多事情elasticsearch + kibana。我们已经有一个MySQL数据库,因此在短期内,我对获得Serilog + Bunyan设置和开发人员使用它更感兴趣,我们可以登录MySQL,同时花更多的时间来流利地进行其余工作。 但是,我们经验丰富的编码人员之一更喜欢做类似的事情:log.debug("Disk quota {0} exceeded by user {1}, quota, user);使用log4net然后对MySQL运行select语句,例如:select text from logs where text like "Disk quota"; 话虽这么说,哪种方法更好,和/或在选择日志系统类型时我们需要考虑什么?
110 c#  javascript  mysql  logging 

10
不要在C#中使用“静态”?
我提交了我写给其他一些架构师的应用程序,以供代码审查。其中一个几乎立即写信给我,说:“不要使用“静态”。您不能使用静态类和方法编写自动测试。要避免使用“静态”。 我检查了一下,并将全部1/4的班级标记为“静态”。当我不打算创建类的实例时,我会使用static,因为该类是整个代码中使用的单个全局类。 他继续提到了涉及模拟,IOC / DI技术的一些静态代码无法使用的技术。他说,由于第三方库不可测试,当第三方库为静态库时很不幸。 这个建筑师是正确的吗? 更新:这是一个示例: APIManager-此类保留我正在调用的第三方API的字典以及下一个允许的时间。它强制执行许多第三方在其服务条款中规定的API使用限制。我可以通过调用Thread.Sleep(APIManager.GetWait(“ ProviderXYZ”))在调用第三方服务的任何地方使用它;在拨打电话之前。这里的所有内容都是线程安全的,并且与C#中的TPL一起使用时效果很好。

5
C#中异步/等待用法的准则是否与好的架构和抽象分层的概念相矛盾?
这个问题与C#语言有关,但我希望它涵盖其他语言,例如Java或TypeScript。 Microsoft建议在.NET中使用异步调用的最佳做法。在这些建议中,让我们选择两个: 更改异步方法的签名,以便它们返回Task或Task <>(在TypeScript中,这将是Promise <>) 更改异步方法的名称以xxxAsync()结尾 现在,当用异步组件替换低级同步组件时,这会影响应用程序的整个堆栈。由于异步/等待仅在“一直使用”时才有积极影响,因此这意味着必须更改应用程序中每一层的签名和方法名称。 好的体系结构通常涉及在每个层之间放置抽象,这样高层组件就看不到用其他组件替换低层组件。在C#中,抽象采用接口的形式。如果我们引入了一个新的,低级的异步组件,则调用堆栈中的每个接口都需要修改或替换为一个新接口。在实现类中解决问题(异步或同步)的方式不再对调用方隐藏(抽象)。调用者必须知道它是同步还是异步。 异步/等待与“良好架构”原则相抵触的最佳做法吗? 这是否意味着每个接口(例如IEnumerable,IDataAccessLayer)都需要它们的异步对应项(IAsyncEnumerable,IAsyncDataAccessLayer),以便在切换到异步依赖项时可以在堆栈中对其进行替换? 如果我们进一步推论这个问题,那么假设每个方法都是异步的(返回Task <>或Promise <>),并且使方法在实际上不是实际的情况下同步,会不会更简单?异步?这是将来的编程语言所期望的吗?
103 c#  architecture  async 

14
简洁在什么时候不再是一种美德?
最近的错误修复要求我检查其他团队成员编写的代码,在这里发现了这一点(它是C#): return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0; 现在,有充分的理由进行所有这些强制转换,这仍然很难遵循。计算中有一个小错误,我不得不解开它以解决问题。 我从代码审查中知道了此人的编码风格,他的方法是较短的总是更好。当然,这里还有价值:我们都已经看到了不必要的复杂的条件逻辑链,这些逻辑可以与一些位置合理的运算符一起整理。但是他显然比我更擅长追随运营商,他们陷入了一个单一的问题。 当然,这最终是样式问题。但是,是否有任何关于识别代码简洁性不再有用并成为理解障碍的观点的写作或研究? 进行强制转换的原因是实体框架。数据库需要将它们存储为可空类型。小数?不等同于C#中的Decimal,需要进行强制转换。

3
创建数据库连接-一次还是为每个查询执行一次?
目前,当我的网页首次加载时,我创建了一个数据库连接。然后,我处理页面并针对该连接运行任何查询。这是最好的方法吗?还是应该在每次运行查询时都创建数据库连接? ps对我来说,创建1个连接并使用它更有意义,但我不知道这是否会引起任何其他问题。 我在MSSQL中使用C#(ASP.NET)。
101 c#  database  sql-server 


16
年轻人需要学习指针概念吗?
为什么C大师Dennis Ritchie会在C中引入指针?以及为什么其他编程语言(例如VB.NET或Java或C#)消除了它们?我在Google中找到了一些要点,我也想听听您的评论。他们为什么要消除现代语言中的指针概念? 人们说C是基本语言,而指针是使C强大而又出众且使C仍能与更多现代语言竞争的概念。那么为什么他们要用更现代的语言消除指针呢? 您认为指针知识对于新程序员仍然重要吗?如今,人们正在使用VB.NET或Java,它们支持比C更高级的功能(并且不使用任何指针概念),而我现在看到的许多人(我的朋友)选择这些语言而忽略了C,因为它们支持高级功能。我告诉他们以C开头。他们说,当您在VB.NET或Java中进行高级的操作(在C中无法实现)时,学习指针的概念很浪费。 你怎么看? 更新时间: 我在Google上读到的评论是: 较早的计算机速度太慢且未优化。 使用指针可以直接访问地址,这样可以节省时间,而不是在函数调用中复制它。 使用指针的安全性要差得多,这就是Java和C#不包含指针的原因。 这些以及更多我发现的东西。我仍然需要一些有价值的答案。这将不胜感激。

13
在源代码中编写SQL是否被视为反模式?
将SQL硬编码到这样的应用程序中是否被认为是一种反模式: public List<int> getPersonIDs() { List<int> listPersonIDs = new List<int>(); using (SqlConnection connection = new SqlConnection( ConfigurationManager.ConnectionStrings["Connection"].ConnectionString)) using (SqlCommand command = new SqlCommand()) { command.CommandText = "select id from Person"; command.Connection = connection; connection.Open(); SqlDataReader datareader = command.ExecuteReader(); while (datareader.Read()) { listPersonIDs.Add(Convert.ToInt32(datareader["ID"])); } } return listPersonIDs; } 我通常会有一个存储库层等,但是为了简单起见,我在上面的代码中将其排除在外。 我最近收到了一位同事的一些反馈,该同事抱怨SQL是用源代码编写的。我没有机会问为什么,他现在已经离开了两个星期(也许还有更多)。我认为他的意思是: 使用LINQ …
87 c#  sql 

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.