Questions tagged «c#»

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

5
我应该检查数据库中是否存在某些东西并且快速失败或等待数据库异常
有两节课: public class Parent { public int Id { get; set; } public int ChildId { get; set; } } public class Child { ... } 分配给时ChildId,Parent我应该首先检查数据库中是否存在它,或者等待数据库引发异常? 例如(使用实体框架核心): 注意,即使在官方的Microsoft文档中,这类检查也已遍及整个Internet:https://docs.microsoft.com/zh-cn/aspnet/mvc/overview/getting-started/getting-started-with-ef-using- MVC /处理与实体框架在ASP.NET MVC应用程序中的并发处理#修改部门控制器,但还有其他异常处理SaveChanges 另外,请注意,此检查的主要目的是向API用户返回友好消息和已知的HTTP状态,而不是完全忽略数据库异常。并且唯一引发异常的地方是在内部SaveChanges或SaveChangesAsync调用中...因此,当您调用FindAsync或时不会有任何异常Any。因此,如果子项存在但在此之前被删除,SaveChangesAsync则将引发并发异常。 我这样做的原因是,foreign key violation异常将很难格式化以显示“找不到ID为{parent.ChildId}的孩子”。 public async Task<ActionResult<Parent>> CreateParent(Parent parent) { // is this code redundant? // NOTE: its …

7
关于C#和Java是一半语言的陈述意味着什么?[关闭]
在文章:为什么选择POCO中,有这句话: Maciej Sobczak很好地指出:“我只是不喜欢有人给我一半的语言,并告诉我这是为了我自己的保护”。 我不明白他的意思,尽管C#是微软拥有与Java的由Oracle拥有的,但这并不意味着他们持有一半的语言,不是吗?我没有发现任何证据可以证明这一句话,对此我感到很好奇。甚至对“为了我自己的保护”部分感到好奇。
32 java  c#  microsoft  oracle 

10
为什么在面试过程中很难回答“给您带来有关C#的五件事”的问题?[关闭]
在第73播客中,乔尔·斯波斯基(Joel Spolsky)和杰夫·阿特伍德(Jeff Atwood)讨论了“每个人都应该讨厌自己喜欢的编程语言的五件事”: 如果您对当前的工具链感到满意,则无需切换。但是,如果您不能列出您最不喜欢的编程语言的五件事,那么我认为您还不了解它。最好知道这些替代方法,并且对所使用的任何方法都保持批判的眼光。 很好奇,我问了我面试的任何候选人这个问题。他们中没有人能够引用他们至少讨厌C#¹的一件事。 为什么?这个问题有什么困难?正是由于面试压力大,被访者无法回答这个问题? 这个问题有什么问题使面试不好吗? 显然,这并不意味着C#是完美的。我自己列出了我不喜欢C#的五件事: 泛型中缺乏可变数量的类型(类似于params参数)。 Action<T>, Action<T1, T2>, Action<T1, T2, T3>, ⁞ 严重? Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> 缺少对度量单位的支持,例如在F#中。 缺少只读属性。private readonly每当我想要只读属性时,都会写一个后备字段。 缺少具有默认值的属性。是的,我知道我可以在无参数构造函数中对其进行初始化,并从所有其他构造函数中调用它。但是我不想。 多重继承。是的,它会引起混乱,在大多数情况下您不需要它。它在某些(非常罕见)的情况下仍然有用,并且混淆也适用于该类(该类在C#中已解决),该类继承了多个包含相同名称的方法的接口。 我敢肯定,这个清单还远远不够完整,还有很多要强调的地方,尤其是比我的要好得多的地方。 ¹一些人批评.NET Framework中的某些程序集,或者该框架中缺少某些库,或者批评CLR。这不算什么,因为问题是关于语言本身的,尽管我可能会接受有关.NET Framework核心否定性问题的答案(例如,诸如以下事实这样的事实:没有通用接口TryParse,所以如果您想将字符串解析为几种类型,则必须对每种类型重复一次),关于JSON或WCF的答案完全是题外话。
32 c#  interview 

4
为什么F#具有交互模式而不是C#?
F#带有交互式REPL,开箱即用。C#没有任何种类,实际上如果不建立完整的项目就很难玩(尽管LINQpad可以工作,并且也可以通过powershell来完成)。 这些语言在本质上有什么不同,这些语言允许F#拥有交互式控制台,但是很难为C#实现它? 由于多年以后,人们仍然会提出这个问题,我应该指出,现在有很多选择。您可以使用Powershell(预装在每台现代Windows机器上)与.Net框架一起使用。或者,您可以使用LINQpad原型化任意c#代码。或者,您可以使用ScriptC,也可以使用在线jsfiddle类型的环境,例如Complify.net或Jsil。很多选择。
32 c#  .net  tools  f# 

10
使用GUID作为主键
我通常在数据库中使用自动增量ID作为主键。我正在尝试学习使用GUID的好处。我已经阅读了这篇文章:https : //betterexplained.com/articles/the-quick-guide-to-guids/ 我意识到这些GUID用于在应用程序级别识别对象。它们是否也作为主键存储在数据库级别。例如,假设我有以下课程: public class Person { public GUID ID; public string Name; .. //Person Methods follow } 假设我想在内存中创建一个新人员,然后将其插入数据库。我可以这样做吗? Person p1 = new Person(); p1.ID=GUID.NewGUID(); PersonRepository.Insert(p1); 假设我有一个包含数百万行的数据库,其中GUID作为主键。这将永远是独一无二的吗?我什至正确理解了GUID吗? 我之前读过这篇文章:http : //enterprisecraftsmanship.com/2014/11/15/cqs-with-database-generation-ids/。它似乎使我感到困惑,因为它似乎建议在GUID和整数之间作为主键使用快乐的介质。 编辑11/06/18 我已经相信Guid比int更适合我的要求。这些天来,我使用CQRS的次数更多,而GUID则更适合。 我确实注意到一些开发人员在域模型中将GUID建模为字符串,例如:https : //github.com/dotnet-architecture/eShopOnContainers/blob/dev/src/Services/Ordering/Ordering.Domain/AggregatesModel/BuyerAggregate/ Buyer.cs-在这种情况下:IdentityGuid是一个建模为字符串的GUID。除了此处说明的内容外,是否还有其他理由:在分布式系统中使用自定义值对象或Guid作为实体标识符?。将GUID建模为字符串是“正常的”还是应该在模型和数据库中将其建模为GUID?

2
选择正确的设计模式
我一直都认识到利用设计模式的重要性。我对其他开发人员如何选择最合适的开发人员感到好奇。您是否使用一系列特征(例如流程图)来帮助您做出决定? 例如: 如果对象是相关的,但是我们不想指定具体的类,请考虑Abstract 将实例化留给派生类时,请考虑使用Factory 需要顺序访问聚合对象的元素,请尝试使用Iterator 或类似的东西?

5
为什么C#和Java使用引用相等作为'=='的默认值?
我已经思考了一段时间,为什么Java和C#(我敢肯定其他语言)默认引用相等==。 在我做的编程中(当然,这只是编程问题的一小部分),在比较对象而不是引用相等时,我几乎总是想要逻辑相等。我试图思考为什么这两种语言都走这条路线而不是颠倒它,并具有==逻辑上的相等性,并.ReferenceEquals()用于引用相等性。 显然,使用引用相等很容易实现,并且行为非常一致,但是似乎并不适合我今天看到的大多数编程实践。 我不想对尝试实现逻辑比较的问题一无所知,并且必须在每个类中都实现它。我也意识到这些语言是很久以前设计的,但总的问题仍然存在。 默认情况下,我只是缺少一些主要好处,还是默认行为应该是逻辑相等,并且默认返回引用相等,而该类不存在逻辑相等似乎合理吗?

5
Javascript模块化,基于服务器的MVC和业务现实
我知道这是一个非常广泛的问题,但是我已经分别处理了该问题的各个方面,并且正在努力将所有概念和技术结合在一起。 我想指定答案应包括以下技术: C# 带剃刀的MVC 3 带有jQuery的Javascript 如果这些内容有助于回答以下问题,则欢迎将其视为超越建议的建议(例如Backbone.js,Entity Framework等): 使用上面列出的技术,在组织代码和逻辑,同时保持可伸缩性和创建丰富,快速,干净的UI的能力方面,什么是最佳策略? 理想情况下,应将重点放在部署在企业/企业环境中的解决方案上。请注意,上面的技术列表不会更改,因此请不要提供“您应该使用xxx而不是现在使用的yyy ”的解决方案。 背景 我每天都使用jQuery,已经采用ASP.NET的MVC,并且已经使用C#很长时间了。因此,您可以假设这些技术的中高级知识来提出解决方案。 我将问题分成较小的部分,以使其更易于回答: 1.项目结构 鉴于我正在使用ASP.NET MVC(在Visual Studio 2010中),我想要一个目录结构解决方案,该解决方案可以接受这种类型的应用程序的主要布局。我猜想像早午餐一样,但是每个文件夹将包含什么以及它如何与应用程序的其他区域一起工作的更多细节。 2.数据访问 我想使用一种API类型的结构来尽可能地模块化我的数据访问。你可以假设很多POCO对象(的User,UserGroup,Customer,OrderHeader,OrderDetails,等),但也会有一些复杂的报表需要数据密集型的SQL和精心UI渲染。 EF + LINQ对于前者而言非常出色,但对于后者则不那么理想。在没有过于复杂或过于简单的情况下,我找不到适合两种情况的东西。 3.客户端代码组织和UI渲染 像大多数开发人员最先使用jQuery一样,我陷入了将代码混在一起的陷阱,但是很快发现它堆积并变得丑陋。尽管从那时起我就突飞猛进,但我仍在努力使代码模块化以及在不重复代码的情况下使用UI的各个部分。 举例来说,我可能会编写的典型代码看起来像这样,我评论了困扰我的东西(请注意,此后我已更改为使用延迟的AJAX调用,并从DOM操作中分离了实际的数据请求): $('#doSomethingDangerous').click(function () { // maybe confirm something first if (confirm('Are you sure you want to do this?')) { // show a spinner? something …

7
何时应在诸如KeyValuePair之类的预构建结构上使用2属性类?
什么时候应该将键/值类型的数据放在其自己的类中,而不是使用诸如a KeyValuePair或a 之类的预构建通用结构Tuple? 例如,我创建的大多数ComboBox都包含一个DisplayName和一个Value。这是我要决定何时放入新类以及何时仅使用KeyValuePair的数据类型。 我目前正在使用进行某些操作,iCalendar最终将所选用户的数据合并为一种key1=value1;key2=value2;字符串。我首先将数据放入KeyValuePair<string,string>,但现在我想知道那是否应该是它自己的类。 总的来说,我很想知道在决定使用现有的结构/类(如KeyValuePair2属性对象)时使用什么准则,以及在哪种情况下您应该使用哪种准则。
31 c#  coding-style 

7
如何建议使用ORM代替存储过程?
我在一家仅使用存储过程进行所有数据访问的公司工作,这使我们的本地数据库保持同步非常烦人,因为每次提交都必须运行新的proc。过去,我曾经使用过一些基本的ORM,但是我发现使用它的经验要好得多,更干净。我想向开发经理和团队中的其他成员建议我们考虑使用某种ORM进行未来开发(团队中的其他成员仅熟悉存储过程,而从未使用过其他东西)。当前的体系结构是.NET 3.5,类似于.NET 1.1,具有“神类”,它们使用ActiveRecord的奇怪实现并返回在代码隐藏文件中循环的未类型化数据集-这些类的工作方式如下: class Foo { public bool LoadFoo() { bool blnResult = false; if (this.FooID == 0) { throw new Exception("FooID must be set before calling this method."); } DataSet ds = // ... call to Sproc if (ds.Tables[0].Rows.Count > 0) { foo.FooName = ds.Tables[0].Rows[0]["FooName"].ToString(); // other properties set …

5
当不需要属性之一时实现接口
很简单。我正在实现一个接口,但是该类没有一个属性是必需的,实际上,不应使用该属性。我最初的想法是做一些类似的事情: int IFoo.Bar { get { raise new NotImplementedException(); } } 我想这本身没有错,但是感觉并不“正确”。有人遇到过类似情况吗?如果是这样,您是如何处理的?

9
设计一个类以将整个类作为参数而不是单个属性
举例来说,假设您有一个应用程序,该应用程序具有广泛共享的类,称为User。此类公开有关用户,其ID,名称,对每个模块的访问级别,时区等所有信息。 用户数据显然在整个系统中得到了广泛的引用,但是无论出于何种原因,都对系统进行了设置,因此,我们不是在将用户对象传递到依赖于该对象的类中,而是从其中传递了各个属性。 需要用户ID的类仅需要GUID userId作为参数,有时我们可能还需要用户名,因此将其作为单独的参数传递。在某些情况下,这将传递给各个方法,因此这些值根本不会保存在类级别。 每当我需要从User类访问不同的信息时,我都必须通过添加参数进行更改,而在不适合添加新的重载的地方,我也必须更改对方法或类构造函数的每个引用。 用户只是一个例子。这在我们的代码中得到了广泛的实践。 我认为这违反了开放/封闭原则,对吗?不仅是更改现有类的行为,而且是首先设置它们,以便将来很有可能需要进行广泛的更改吗? 如果我们只是传入User对象,则可以对正在使用的类进行一些小的更改。如果必须添加参数,则可能不得不对类的引用进行数十次更改。 这种做法是否违反了其他任何原则?依赖倒置也许?尽管我们没有引用抽象,但是只有一种类型的用户,因此并没有真正需要User界面的需求。 是否还有其他违反非Solid的原则,例如基本的防御性编程原则? 我的构造函数应如下所示: MyConstructor(GUID userid, String username) 或这个: MyConstructor(User theUser) 发表编辑: 已经建议在“密码或对象?”中回答问题。这并未回答以下问题的问题:无论哪种方式的决定都会如何影响遵循SOLID原则的尝试,而SOLID原则是此问题的核心。
30 java  c#  design  solid 

14
列表可用时,是否有理由使用数组?[关闭]
List<T>在C#中,似乎可以完成数组可以做的所有事情,并且还可以完成更多工作,并且在内存和性能上也与数组一样高效。 那么,为什么我要使用数组呢? 我显然不是在问API或其他外部约束(即Main函数)需要我使用数组的情况……我只是在问关于在自己的代码中创建新数据结构的问题。
30 c#  data-types 

8
字典与清单
所以我遇到了Dictionary<int, int>今天的工作。这对我来说似乎很奇怪,因为我可能会改用a List<int>。有区别吗?是否会有用例,其中一种结构优于另一种结构?

3
C#,Java和Scala的Closures / Lambdas /…方法的优缺点是什么?
我想知道C#和Scala之间在技术上的实现差异是什么,以及两种解决方案如何与布莱恩·格茨(Brian Goetz)发送给Project Lambda(JSR 335)邮件列表的Peek Past lambda电子邮件中表达的实现思想和关注点进行比较? 从电子邮件: 我们探索了“也许lambdas应该只是内部类实例,那真的很简单”之路,但最终走到了“函数是语言未来的更好方向”的位置。 并进一步: 世界的lambdas-are-objects视图与这个可能的未来冲突。对世界的lambda-are-functions视图并不了解,并且保留这​​种灵活性是不让lambda负担甚至带有客观性的负担的要点之一。 结论: Lambdas-are函数打开了大门。Lambdas-are-objects将它们关闭。 我们更希望看到那些门保持打开状态。 有人在Reddit主题上发表了一些评论: 我实际上通过电子邮件向Neal Gafter发送了电子邮件,由于我对他的解释的有限理解,C#和当前的Java设计非常相似,因为Delegates实际上是对象而不是函数类型。似乎他认为Java应该从C#的lambda的缺点中学习并避免它们(就像C#从Java的缺点中获悉并在一开始就避免它们一样)。 为什么“ Lambdas-are-functions”方法比“ Lambdas-are-objects”在将来能提供更多的机会?有人可以解释存在什么差异以及它们如何影响代码的编写方式吗? 看到Scala中的事情“可行”,我一直在想,我缺少关于C#/ Java(8)中采用/提出的方法的某些东西,可能与对向后兼容性的关注有关吗?
30 c#  java  scala  lambda  closures 

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.