Questions tagged «c#»

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

2
我应该将“计算”值公开为属性还是方法?
我有一个C#类,它表示Web内容管理系统中的内容类型。 我们有一个字段,允许Web内容编辑器输入HTML模板以显示对象的显示方式。它基本上使用把手语法将对象属性值替换为HTML字符串: <h1>{{Title}}</h1><p>{{Message}}</p> 从类设计的角度来看,我应该将格式化的HTML字符串(带有替换)作为属性或方法公开吗? 作为属性的示例: public class Example { private string _template; public string Title { get; set; } public string Message { get; set; } public string Html { get { return this.ToHtml(); } protected set { } } public Example(Content content) { this.Title = content.GetValue("title") as string; this.Message …

2
为什么用Handle()分隔类CommandHandler而不是Command本身的处理方法
我有一部分使用S#arp Architecture实施的CQRS模式,如下所示: public class MyCommand { public CustomerId { get; set; } // some other fields } public class MyCommandHandler<MyCommand> : ICommandHandler<MyCommand, CommandResult> { Handle(MyCommand command) { // some code for saving Customer entity return CommandResult.Success; } } 我想知道为什么不只Command包含数据和处理方法的类?这是一种可测试性的好处,您需要与命令属性分开测试命令处理逻辑吗?还是某些频繁的业务需求,您需要由不同的实现来处理一个命令ICommandHandler<MyCommand, CommandResult>?

4
哪种方法可以终止阅读循环?
当您需要遍历读取器的地方时,要读取的项目数是未知的,唯一的方法是保持读取直到结束。 这通常是您需要无限循环的地方。 还有就是始终true表示必须有一个break或return声明的某处块内。 int offset = 0; while(true) { Record r = Read(offset); if(r == null) { break; } // do work offset++; } 有双读for循环方法。 Record r = Read(0); for(int offset = 0; r != null; offset++) { r = Read(offset); if(r != null) { // do work } } …

2
使用C#接口实现Haskell类型类
我正在尝试比较Haskell的类型类和C#的接口。假设有一个Functor。 Haskell: class Functor f where fmap :: (a -> b) -> f a -> f b 如何在C#中将此类型类实现为接口? 我尝试过的 interface Functor<A, B> { F<B> fmap(Func<A, B> f, F<A> x); } 这是无效的实现,实际上我受困于F应该由返回的泛型类型fmap。应该如何定义它以及在哪里? Functor用C#不可能实现吗?为什么?也许还有另一种方法?
13 c#  haskell 

4
linq是否比表面上的效率更高?
如果我写这样的话: var things = mythings .Where(x => x.IsSomeValue) .Where(y => y.IsSomeOtherValue) 是否与以下内容相同: var results1 = new List<Thing>(); foreach(var t in mythings) if(t.IsSomeValue) results1.Add(t); var results2 = new List<Thing>(); foreach(var t in results1) if(t.IsSomeOtherValue) results2.Add(t); 还是在幕后有一些更像这样的魔术: var results = new List<Thing>(); foreach(var t in mythings) if(t.IsSomeValue && t.IsSomeOtherValue) results.Add(t); 还是完全不同?
13 c#  linq 

1
为什么瑞沙珀更喜欢“原样”而不是“原样”?
当我编写这样的代码时,其中obj是局部变量: if (obj is IMyInterface) { var result = (IMyInterface)obj; // .... } Resharper提议将其更改为如下代码: var result = obj as IMyInterface; if (result != null) { // ... } 我更喜欢前者,因为它没有提供偶然的空引用异常的机会。有什么理由偏爱其他形式? 为什么Resharper建议这样做?
13 c#  resharper 


2
内联代码注释的最佳方法是什么?
我们正在对已有20年历史的旧代码库进行一些重构,并且我正在与我的同事讨论代码中的注释格式(plsql,java)。 没有默认的注释格式,但是在大多数情况下,人们会在注释中执行以下操作: // date (year, year-month, yyyy-mm-dd, dd/mm/yyyy), (author id, author name, author nickname) and comment 我想要的将来和过去评论的建议格式是: // {yyyy-mm-dd}, unique_author_company_id, comment 我的同事说,我们只需要评论,并且必须将所有过去和将来的评论重新格式化为这种格式: // comment 我的论点: 我说出于维护原因,知道何时以及谁进行了更改非常重要(即使此信息在SCM中也是如此)。 该代码是有效的,因此有历史。 因为没有更改日期,如果不打开SCM工具并搜索较长的对象历史记录,就无法知道何时进行更改。 因为作者非常重要,所以改变作者比改变作者更可信 敏捷性原因,无需打开和浏览SCM工具 人们会更害怕更改某人15年前所做的事情,而不是最近创建或更改的事情。 等等 我同事的论点: 历史在SCM中 开发人员不得直接在代码中了解代码的历史记录 软件包的长度为15,000行,而且非结构化的注释使这些软件包更难以理解 您认为最好的方法是什么?还是您有更好的方法来解决此问题?

4
接口是否应该扩展其他接口(并以此继承方法)
尽管这是一个普遍的问题,但它也特定于我当前遇到的问题。我目前在解决方案中指定了一个接口,称为 public interface IContextProvider { IDataContext { get; set; } IAreaContext { get; set; } } 该接口经常在整个程序中使用,因此我可以轻松访问所需的对象。但是,在程序一部分的较低级别,我需要访问另一个将使用IAreaContext并对其执行一些操作的类。因此,我创建了另一个工厂接口来执行此创建操作: public interface IEventContextFactory { IEventContext CreateEventContext(int eventId); } 我有一个实现IContextProvider的类,并使用NinJect注入。我遇到的问题是,我需要使用此IEventContextFactory的区域只能访问IContextProvider,并且本身使用另一个需要该新接口的类。我不想在低级实例化IEventContextFactory的此实现,而是希望始终使用IEventContextFactory接口。但是我也不想只通过构造函数注入另一个参数,而只是将其传递给需要它的类,即 // example of problem public class MyClass { public MyClass(IContextProvider context, IEventContextFactory event) { _context = context; _event = event; } public void DoSomething() …
13 c#  design  interfaces 

6
集合请求将有零个项目时的预期行为
假设您得到以下信息... List<Thing> theThings = fubar.Things.All(); 如果没有什么可以返回的,您期望fubar.Things.All()返回什么? 编辑:感谢您的意见。我会稍等一下,并接受最多的评论。 我同意到目前为止的回应,尤其是那些建议收藏空的回应。供应商为API提供了多次调用,类似于上面的示例。去年,通过其API实现收入460万美元的供应商BTW。他们做了我根本不同意的事情-他们抛出了异常。
13 java  c# 

3
如何对音频进行单元测试?
我已经继承了一个小项目,并希望通过为要添加的所有新代码编写单元测试来扩展并稳定它。第一类TypedAudioCreator创建音频文件,事实证明,这很容易首先进行测试,然后编写代码。 但是,到了编写的时间TypedAudioPlayer,我不知道该如何测试。这是一门很小的课程,专注于播放声音的基础知识: public class TypedAudioFilePlayer { public event StartedPlayingHandler StartedPlaying; public event StoppedPlayingHandler StoppedPlaying; public readonly int TimeBetweenPlays; private Queue<TypedAudioFile> _playlist = new Queue<TypedAudioFile>(); public TypedAudioFilePlayer(int timeBetweenPlays) { TimeBetweenPlays = timeBetweenPlays; } public void AddFile(TypedAudioFile file) { _playlist.Enqueue(file); } public void StartPlaying() { ThreadPool.QueueUserWorkItem(ignoredState => { while (_playlist.Count > 0) …
13 c#  tdd 

7
C#经验能否很好地转换为C ++?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我在学校的编程课是C ++,但是最近几年我最终从事C#工作。如果某个职位要求说1或2年C ++经验,那么我在C#方面的经验值得考虑吗?我担任这样的职位有多有效?那么,我是否需要以入门级C ++程序员的身份开始学习以获得必要的经验?
13 c#  c++  experience 

3
我应该在XML文档注释中包括什么?
我试图提出一个更好地记录我的代码的观点,尤其是在涉及类成员的XML注释时,但通常感觉很傻。 对于事件处理程序,命名约定和参数是标准且清晰的: /// <summary> /// Handler for myCollection's CollectionChanged Event. /// </summary> /// <param name="sender">Event Sender</param> /// <param name="e">Event Arguments</param> private void myCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { // actual code here... } 我还经常使用简单的属性(IMO)来明确命名,因此摘要是多余的: /// <summary> /// Indicates if an item is selected. /// </summary> public bool ItemIsSelected { get { …
13 c#  coding-style 

2
为什么NHibernate需要存储库模式?
我正在阅读您的第一个基于NHibernate的正式应用程序。 尽管本教程很好且易于遵循,但我想知道为什么使用存储库模式。 在不同的Add,Update,Remove在方法ProductRepository的实现,代码是几乎相同的-他们使用的所有交易,不同的是在“肉”,即调用session.SaveINT的Add方法,session.Delete在remove方法。(页面缺少HTML锚,但你可以搜索页面像相关的代码public void Remove,public void Add) 该代码只是“感到错误”。 作者为什么使用Repository模式-仅仅是为了演示使用NHibernate还是出于某些原因? 附言 我的背景是使用ActiveRecord的Ruby on Rails,所以我试图弄清NHibernate的工作方式/使用方式。
13 c#  .net  nhibernate 

4
在模型中放入诸如“ FullName”或“ FormattedPhoneNumber”之类的吸气剂是“一种模式的气味”吗?
我正在开发ASP.NET MVC应用程序,并且已经养成了将看起来有用且方便的吸气剂放入模型/实体类的习惯。 例如: public class Member { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string PhoneNumber { get; set; } public string FullName { get { return FirstName + " " + LastName; } } …

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.