Questions tagged «c#»

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

3
Microsoft当前建立.NET数据层的最佳做法?和现实?
我正在使用的开发团队将很快迁移到.NET 4.0,但是,我们使用的数据访问类库仍然使用ADO.NET“经典”,即SqlDataReader,DataTable等。同时,Microsoft和世界其他地方似乎都在通过Entity Framework和WCF Data Services向前发展。我没有在MSDN上找到任何表明Microsoft认为最佳实践的数据访问技术的信息。 微软有偏好吗?大多数人当前使用什么数据访问方式?是否有充分的理由使用ADO.NET classic而不迁移到Entity Framework?

8
命名约定准则值得关注吗?
我使用.Net约定来命名变量: camelCase用于变量和字段(我倾向于将_camelCase用于类中的私有字段) PascalCase用于方法,属性和类 我唯一偏离的地方是我实际上更喜欢Java SCREAMING_CAPS样式的常量和枚举。 我公司的代码库散布着来自VB6和VBScript的伪匈牙利表示法样式,如果不是成熟的匈牙利语,即 s或str表示字符串 我或诠释为诠释 d代表小数(有时是双精度) o或obj(任何类型的对象) 每当我看到别人的代码中使用了这种代码样式(即使是在未开发的代码中,而不仅仅是旧版代码)时,我都会感到畏缩,而我拒绝自己使用这种样式。过去,我提起过.Net命名约定的标准化,但是它被忽略了-用匈牙利符号书写的人们继续这样做,而我们中不喜欢我的人们继续使用我们自己的风格;我有点担心,如果我们进行标准化(我一直在努力,但似乎没人在乎),它将采用匈牙利符号,而不是推荐的方式,然后我将被迫编写这样的代码。 在这方面,我是不是从暴风雪中爬了出来?我是否应该不在乎代码中是否有多余的标识符,而不是描述性的名称,而是继续使用自己的方式并促使其成为标准?

7
谁能建议我写一个项目来帮助我理解线程
我目前是一位C#开发人员,对线程的理解很不稳定。 这两个链接已在其他帖子中建议: http://www.yoda.arachsys.com/csharp/threads/ http://www.albahari.com/threading/ 我是否应该回到基础知识,也许再看一些有关该主题的计算机科学教材? 我真的觉得,如果我跳入并使用c#库,我将不会真正拥有扎实的知识基础。我想我需要像com cici学生一样从头开始学习这个主题,然后使用C#库。 谁能建议一种学习线程的方法,也许一些链接和/或项目构想? 提前致谢! 编辑,感谢所有答复。有人提到一本书可能是一个好主意,有人可以建议吗?我更喜欢不可知的语言。有谁知道计算机科学学位将涵盖哪些课程?我正在尝试Google搜索一些免费的在线笔记和作业。

5
通过公共API设计平衡依赖项注入
我一直在考虑如何通过提供简单的固定公共API来平衡使用依赖注入的可测试设计。我的困境是:人们希望做类似的事情var server = new Server(){ ... },而不必担心创建a Server(,,,,,,)可能具有的许多依赖关系和依赖关系图。在开发过程中,我不必担心太多,因为我使用IoC / DI框架来处理所有这些事情(我没有使用任何容器的生命周期管理方面,这会使事情进一步复杂化)。 现在,依赖关系不太可能重新实现。在这种情况下,组件化几乎纯粹是为了可测试性(和体面的设计!),而不是为了扩展等而创建接缝。人们将有99.999%的时间希望使用默认配置。所以。我可以对依赖项进行硬编码。不想这样做,我们会丢失测试!我可以提供一个带有硬编码依赖关系的默认构造函数,以及一个带有依赖关系的构造函数。那是...杂乱无章,可能令人困惑,但可行。我可以将接收构造函数的依赖项设置为内部,并使我的单元测试成为一个朋友程序集(假定为C#),它整理了公共API,但留下了一个隐藏的陷阱供维护。在我的书中,具有两个隐式连接而不是显式连接的构造函数通常是不好的设计。 目前,这是我能想到的最少的邪恶。意见?智慧?
13 c#  api 

4
.NET认证考试之间有什么区别?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我是使用WPF和ASP.NET MVC的.NET开发人员,我希望通过某种认证考试。 似乎有四门考试,但我什至无法理解与Microsoft的定义之间的区别: MCPD 计算机辅助设计 MCSD MTA 它们如何相互联系?通过认证考试是否有自然的进阶途径?他们适合什么版本的.NET?
13 c#  .net 

4
尝试向命令式程序员讲解声明式编程时,有哪些好的做法?
我愿意在我的公司做一些F#的培训,他们似乎表现出了一些兴趣。他们通常是VB6和C#程序员,他们对编程的热情不高。话虽这么说,当您考虑功能问题时,我觉得编写正确的代码会更容易,因此他们一定会从中受益。 谁能提供一些有关我应该如何处理此问题的建议? 主意 不要专注于语法,而应该专注于如何使用该语言及其所推广的习语。 试想一下以命令式方式编写的示例很痛苦,但是以声明式方式编写时却转换为优雅的代码。

2
如何实现错误处理
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 即使我已经在专业水平上编程了几年,但我仍然不完全理解错误处理。尽管我的应用程序运行良好,但错误处理并未在专业级别上实现,而是多种技术的结合与匹配。 我的错误处理没有任何结构。我想学习和理解它是如何在专业水平上实现的。这是我缺乏知识的领域。 什么时候应该使用异常,什么时候应该返回成功状态,以在逻辑流程中进行检查?可以混合异常并返回状态吗? 我主要使用C#编写代码。

2
我如何才能充分利用自己的编码技能?
到今年秋天,我的两个小型网站每月的最低/零投入应该总计约为1200美元,这足以让我过上舒适的生活。 我宁愿花几年的时间做一些真正好的事情,也可以帮助需要它的其他人,而不愿从事另一项业务。我想花4到5年的时间将自己的时间用于有价值的事业,并尽我所能来帮助我掌握已有的Web开发和编程技能。 问题是我不知道从哪里开始。我对自己的想法并不了解,并且对许多大型慈善机构表示怀疑。理想情况下,我想找到一个小型项目,每个人都没有薪水,专注于帮助。 有没有这么小的组织? 是否有人想出一个项目/网站/应用程序的想法,可以帮助有需要的人希望他们与我合作或与他们合作? 我知道这不是典型的StackOverflow 2 + 2 =?类型问题,有些人会很想删除它,但考虑到IT行业的慈善性质(仅看SO本身),这对于现在或在职业生涯中的许多开发人员来说都是非常相关的问题。考虑到日本最近发生的事件,这个问题与许多寻求与他人分享技能和时间来帮助他人的人特别相关。 真的很期待阅读您的想法/答案,谢谢大家
13 c#  java  php  javascript  jquery 

8
暴露异步功能的接口是泄漏抽象吗?
我正在阅读《依赖注入原理,实践和模式》一书,并了解了泄漏抽象的概念,该概念在本书中有很好的描述。 这些天来,我正在使用依赖注入重构C#代码库,以便使用异步调用而不是阻塞调用。这样做时,我正在考虑一些接口,这些接口在我的代码库中表示抽象,并且需要重新设计以便可以使用异步调用。 例如,考虑以下接口,它代表应用程序用户的存储库: public interface IUserRepository { Task<IEnumerable<User>> GetAllAsync(); } 根据书中的定义,泄漏抽象是设计时考虑到特定实现的抽象,因此某些实现详细说明了抽象本身的“泄漏”。 我的问题如下:我们可以考虑以异步方式设计的接口(例如IUserRepository)作为泄漏抽象的示例吗? 当然,并非所有可能的实现都与异步有关:只有进程外实现(例如SQL实现)才需要同步,但是内存中存储库不需要异步(实际上实现接口的内存中版本可能更多)如果接口公开异步方法很困难,例如,您可能必须在方法实现中返回类似Task.CompletedTask或Task.FromResult(users)之类的东西。 您如何看待?

4
使用Null-Coalescing运算符实例化Null对象
请考虑以下典型情况: if(myObject == null) { myObject = new myClass(); } 我想知道使用null-coalescing运算符进行以下替换的想法: myObject = myObject ?? new myClass(); 我不确定是否应该使用第二种形式。这似乎是一个不错的速记,但是myObject = myObject开始时的构造似乎有点代码气味。 这是合理的做法,还是我缺少更好的速记?或者,也许是“三行,克服它!”? 编辑:如上所述,也许将其称为典型场景是一种夸大其词的说法。我通常会在从具有子引用类型属性的数据库中检索一个实体时遇到这种情况,该子引用类型属性可能已填充也可能尚未填充: myClass myObject = myClassService.getById(id); myObject.myChildObject = myObject.myChildObject ?? new myChildClass();
12 c#  operators 

4
具有无意义默认值的结构
在我的系统经常与机场代码(操作"YYZ","LAX","SFO"等),他们总是在完全一样的格式(3封信,表示为大写)。系统通常每个API请求处理这些代码中的25-50个(不同),总共分配了上千个代码,它们在我们应用程序的许多层中传递,并且经常比较它们的相等性。 我们从传递字符串开始就可以了,但仍然可以正常工作,但很快就发现了很多编程错误,因为在期望3位代码的地方传递了错误的代码。我们还遇到了一些问题,我们应该进行不区分大小写的比较,而没有这样做,从而导致错误。 由此,我决定停止传递字符串并创建一个Airport类,该类具有一个采用并验证机场代码的构造函数。 public sealed class Airport { public Airport(string code) { if (code == null) { throw new ArgumentNullException(nameof(code)); } if (code.Length != 3 || !char.IsLetter(code[0]) || !char.IsLetter(code[1]) || !char.IsLetter(code[2])) { throw new ArgumentException( "Must be a 3 letter airport code.", nameof(code)); } Code = code.ToUpperInvariant(); } public string …

5
如果我已经有一个抽象类,定义一个接口是否有意义?
我有一类带有一些默认/共享功能的类。我用abstract class它: public interface ITypeNameMapper { string Map(TypeDefinition typeDefinition); } public abstract class TypeNameMapper : ITypeNameMapper { public virtual string Map(TypeDefinition typeDefinition) { if (typeDefinition is ClassDefinition classDefinition) { return Map(classDefinition); } ... throw new ArgumentOutOfRangeException(nameof(typeDefinition)); } protected abstract string Map(ClassDefinition classDefinition); } 如您所见,我也有接口ITypeNameMapper。如果我已经有一个抽象类,TypeNameMapper或者abstract class已经足够,定义这个接口是否有意义? TypeDefinition 在这个最小的例子中也是抽象的。


5
禁止在外部代码中调用任意函数/类
我曾遇到过一些案例,其中有必要限制外部库和框架的API的访问,以防止对系统造成负面影响。 例如,在SharePoint应用程序中,调用spList.Items.GetItemById以获取列表项似乎很自然,即使是在循环中,也可能没有意识到这会导致巨大的性能问题。 也可能是我们需要禁止使用SmtpClient,以迫使每个人都使用我们自己的类来发送电子邮件,以确保我们可以在测试环境中正确代理和模拟所有电子邮件。 除了在我们自己的代码中的某些特定位置之外,是否有任何可靠且合理直接的方法来实现对外部代码的这些约束?不必绝对在每种情况下都禁止访问这些方法/类,例如通过反射或仅通过某种禁用来禁止访问,而应该严格警告不要使用它们。优选地,如果可能/需要,迫使程序员积极采取措施来克服这些约束。

4
在以“功能”风格进行编程时,您是否在应用程序逻辑中编织了一个应用程序状态?
如何构建具有以下所有功能的系统: 对不可变对象使用纯函数。 只传递给它所需功能的数据,不再传递(即没有大的应用程序状态对象) 避免对函数使用过多的参数。 避免仅出于将参数打包和拆包到函数的目的而构造新对象的方法,只是避免将过多的参数传递给函数。如果我要将多个项目作为一个对象打包到一个函数中,则我希望该对象成为该数据的所有者,而不是临时构造的东西 在我看来,State monad违反了规则2,虽然它并不明显,因为它是通过monad编织而成的。 我觉得我需要以某种方式使用Lenses,但是关于非功能语言的文章很少。 背景 作为练习,我将现有的应用程序之一从面向对象的样式转换为功能样式。我要尝试做的第一件事是尽可能多地利用应用程序的内核。 我听到的一件事是,如何用一种纯函数式的语言来管理“状态”,而我相信这是由State monad完成的,从逻辑上讲,您称一个纯函数为“传递状态”。世界原样”,那么当函数返回时,它会返回给您变化后的世界状态。 为了说明这一点,您可以用一种纯粹的功能性方式来创建“ hello world”的方式有点像,您将程序的屏幕状态传递给程序,然后返回印有“ hello world”状态的屏幕状态。因此,从技术上讲,您要调用一个纯函数,并且没有副作用。 基于此,我遍历了我的应用程序,并且:1.首先将我的所有应用程序状态放入单个全局对象(GameState)中。2.其次,使GameState不可变。您无法更改。如果需要更改,则必须构造一个新的。我通过添加一个复制构造函数来做到这一点,该复制构造函数可以选择接受一个或多个已更改的字段。3.对于每个应用程序,我都将GameState作为参数传递。在函数内,在完成将要执行的操作后,它将创建一个新的GameState并返回它。 我如何拥有纯功能核心,以及外部的循环,该循环将GameState馈入应用程序的主工作流程循环。 我的问题: 现在,我的问题是,GameState有大约15个不同的不可变对象。最低级别的许多功能仅对其中一些对象起作用,例如保持得分。因此,假设我有一个计算得分的函数。今天,GameState传递给此函数,该函数通过使用新分数创建新的GameState来修改分数。 似乎有些错误。该功能不需要完整的GameState。它只需要Score对象。所以我更新了它以传递分数,并仅返回分数。 这似乎很有意义,所以我进一步介绍了其他功能。有些功能需要我从GameState传入2、3或4个参数,但是随着我一直在应用程序的外部核心中使用该模式,我传入了越来越多的应用程序状态。就像在工作流循环的顶部,我将调用一个方法,该方法将调用将调用一个方法的方法,依此类推,一直到计算分数为止。这意味着当前分数会通过所有这些层,只是因为最底层的函数将要计算分数。 所以现在我有了带有数十个参数的函数。我可以将这些参数放入一个对象中以减少参数数量,但是然后我希望该类成为状态应用程序状态的主位置,而不是在调用时简单地构造以避免重复传递的对象输入多个参数,然后解压缩它们。 所以现在我想知道我的问题是否是我的函数嵌套得太深了。这是因为希望具有较小的功能,所以我在一个功能变大时进行重构,然后将其拆分为多个较小的功能。但是这样做会产生更深的层次结构,即使外部函数未直接在这些对象上运行,传递给内部函数的所有内容也都必须传递给外部函数。 似乎只是在避免这种问题的过程中传入了GameState。但是我回到了原来的问题,即向函数传递比函数所需更多的信息。

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.