Questions tagged «c#»

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

4
这种方法纯吗?
我有以下扩展方法: public static IEnumerable<T> Apply<T>( [NotNull] this IEnumerable<T> source, [NotNull] Action<T> action) where T : class { source.CheckArgumentNull("source"); action.CheckArgumentNull("action"); return source.ApplyIterator(action); } private static IEnumerable<T> ApplyIterator<T>(this IEnumerable<T> source, Action<T> action) where T : class { foreach (var item in source) { action(item); yield return item; } } 它只是在返回序列之前对序列的每个项目执行操作。 我想知道是否应该将Pure属性(来自Resharper注释)应用于此方法,并且可以看到支持和反对该参数的参数。 优点: …

1
设计接口和异步
假设我已经IFolderRepository使用以下方法创建了接口: IEnumerable<Folder> GetAllFolders(); Folder GetFolderWithId(int id); void AddFolder(Folder newFolder); void ModifyFolder(Folder folderToModify, Folder folderAfterModification); void RemoveFolder(Folder folderToRemove); 并且我已经实现了DatabaseFolderRepository,可以说CacheFolderRepositoryDecorator。现在,“数百行”之后,我想添加SkyDrive文件夹的功能,因此我准备添加SkyDriveFolderRepository。不幸的是,当DatabaseFolderRepository实现使用同步方法与数据库进行通信时,skydrive使用了很多async和await。在这种情况下该怎么办?在使用void方法将其标记为异步的情况下,这不是解决方案(需要进行异常处理)。我应该更改接口返回Task<T>吗?当然可以在上面的示例中使用,但是它们只是2个接口实现类。还是我的大多数接口都应该具有Task返回类型(因此您不需要规则)?
9 c#  async 

3
在MVVM WPF中将实体框架数据库上下文(模型)连接到ViewModel的最佳方法是什么?
如上述问题:在MVVM(WPF)中将实体框架数据库模型(上下文)连接到viewModel的最佳方法是什么? 我正在WPF中学习MVVM模式,很多示例展示了如何将模型实现为viewModel,但是该示例中的模型只是简单的类,我想将MVVM与实体框架模型一起使用(基于基础的方法)。将模型连接到viewModel的最佳方法是什么? 感谢您的回答。 //ctor of ViewModel public ViewModel() { db = new PackageShipmentDBEntities(); // Entity Framework generated class ListaZBazy = new ObservableCollection<Pack>(db.Packs.Where(w => w.IsSent == false)); } 这是我通常的ViewModel指导,认为有更好的方法,我正在阅读存储库模式,不确定是否可以将其适应WPF MVVM

1
相关类和接口的命名
我创建了一个ObjectParser类,该类使用IObjectParserDataSource用作数据源将数据解析为强类型对象(数据可以是Excel文件,文本文件,数组,查询字符串等)。 我的实现示例IObjectParserDataSource包括: TextFileObjectParserDataSource ExcelFileObjectParserDataSource 这些类名对我来说真的很长且令人困惑。 我可以给他们起个名字: TextFileDataSource ExcelFileDataSource 但这带来了一定程度的模糊性,IObjectParserDataSource乍一看它们之间并没有那么明显地相关。这一点很重要,因为定义这些数据源将在客户端代码中进行,并且我希望将潜在的混乱和不确定性降至最低。 在这种情况下,您将如何命名这些类?

2
如何在C#中封装“全局”变量?/最佳实践
想要改善这篇文章吗?提供此问题的详细答案,包括引文和为什么答案正确的解释。答案不够详细的答案可能会被编辑或删除。 在C#中,封装需要在多种方法中使用的变量的最佳实践是什么?可以简单地在这两个方法上方的类顶部声明它们吗? 另外,如果我从配置文件中使用应用程序设置,是否应该使用吸气剂?像这样... private string mySetting{ get { return WebConfigurationManager.AppSettings["mySetting"]; } } 什么是最佳做法?

3
为多个(内部)项目构建字符串翻译数据库
在我们公司,我们有一个现有的转换ms-sql表,该表存储这样的字符串: Id | Key | Language | Value 1 | hello-world | nl-BE | Hallo Wereld 2 | hello-world | en-GB | Hello World 系统中有3种语言,我希望将来会增长到大约10种 该表由多个非常不同的项目(大约60个项目,主要是网站/ Web应用程序和某些Web服务)读取,每个项目均打开与翻译数据库的数据库连接,并缓存翻译内容 前端开发人员的反馈是,我们的UIto输入或修改翻译的最大弊端是他们不知道哪个项目使用什么字符串。 他们有时会修改字符串,却不知道它们会破坏7个项目。 现在,他们只需要键入类似内容this.Translate("Hello World"),系统就会处理其余的工作。 我当然可以强迫他们采用类似的方法,this.Translate("Hello World","AwesomeApplication1")但是似乎在许多项目中都需要进行大量的重构。 您将如何提供此解决方案?作为开发人员,您将如何为翻译提供“项目名称”?您如何将其存储在数据库中? 重要说明:翻译的重用是集中式数据库的全部内容,因此,将翻译范围限定为一个项目 1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1 5|hello-world|nl-BE|Hallo Wereld!|MyAwesomeApplicatoin2 并不是真正的通缉选项。 我更喜欢这样的东西: 1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1,MyAwesomeApplicatoin2 或等同于仅将名称放在表中的外键。 更新 到目前为止,基于规范化数据库的建议,我提出了类似以下内容: //this allows me to …
9 c#  resources 

3
在没有可处理的情况下,“使用”是否合适?
在C#中,using语句用于确定性地配置资源,而无需等待垃圾回收器。例如,它可以用于: 处置SQL命令或连接, 关闭流,释放基础源,例如文件, 免费的GDI +元素, 等等 我注意到,using在没有什么要处理的情况下,这种用法越来越多,但是对于调用者来说,编写一个using块而不是两个单独的命令更方便。 例子: 由Stack Overflow团队编写的MiniProfilerusing用于表示要分析的块: using (profiler.Step("Name goes here")) { this.DoSomethingUseful(i - 1); } 一种替代方法是具有两个块: var p = profiler.Start("Name goes here"); this.DoSomethingUseful(i - 1); profiler.Stop(p); 另一种方法是使用动作: profiler.Step("Name goes here", () => this.DoSomethingUseful(i - 1)); ASP.NET MVC还选择了using以下形式: <% using (Html.BeginForm()) { %> <label for="firstName">Name:</label> <%= Html.TextBox("name")%> …

4
C#中的常量
为何编译器将常量值存储在程序集元数据中?它们是否直接从程序集元数据嵌入到中间语言代码中?
9 c#  clr  compilation 

8
过去的If语句数组,循环…现在呢?
一年前,当我不断碰壁时,我放弃了编程。我正在重新研究该主题,因为我想创建基本的Android应用程序。但是我觉得我有限的知识是不够的。 这是我的问题。 我已经阅读了几本书,并观看了有关C#/ Java的视频教程,并跟随了示例,然后完成了这本书。最后,他们似乎总是让我对下一步该怎么做感到震惊。 这是什么意思,他们从基本的“ hello world”应用程序一直教您到if和array,然后看似希望您知道如何进入编码世界并创建任何东西。 我在这里想念什么吗?我知道这些是所有程序的基础,但我读过的书从未真正向我展示下一步该怎么做。 我想简单的答案是“开始编码”,但是在哪里?例如,我读过“ Head First Java”。直到他们告诉你把学到的一切都用来制作狗赛车游戏为止。 “不要欺骗并查看提供的源代码,您现在应该可以做到这一点。” _这不是确切的引用,但基本上就是我被告知的…… 半个小时前,他们只是在解释如何做数组,然后我毫无理论地打算创建一个工作游戏? 我之所以这样问,是因为我担心这至少是我应该知道的,至少开始编码了,但是感觉就像是给了我一个小工具箱,并被告知要建造一座摩天大楼。 谢谢你的建议

5
“编程错误”例外-我的方法是否正确?
我目前正在尝试改善对异常的使用,发现了在表示编程错误的异常(例如,有人将null作为参数传递,或在对象被处置后调用方法)与在编程中指示失败的异常之间的重要区别。不是调用者的错误的操作(例如,I / O异常)。 这两种例外应如何区别对待?您是否认为需要明确记录错误异常,还是足以记录相关的前提条件?并且您是否可以忽略前提条件或错误异常的文档(如果它很明显)(例如,ObjectDisposedException在处置对象上调用方法时)
9 java  c#  c++  exceptions 

1
与(通用)框架名称冲突的类名称应该怎么做
当框架使用最明显的组件类名称时,应该怎么做?就我而言,我需要创建一个描述HTTP请求的类。当然,最常用的名称是“采用”为System.Web.HttpRequest。我该怎么办?该项目将在Web上下文中使用,所以我真的不想强迫人们不要导入System.Web命名空间,或者手动键入我所有的类名。 处理此问题的通常方法是什么?我可以提出: 带项目简称的前缀类名 尝试使用不同的名称表示相同的意思(我已经尝试过,但无法提出任何建议) 强制用户在名称空间之间进行选择
9 c#  .net  naming  namespace 

5
嵌套类是否被低估?
我并不是要说我知道其他人都不知道的东西,但是我一直在使用嵌套类来解决越来越多的设计问题,所以我很好奇这种使用似乎很少使用的可接受性的感觉设计机制。 这就引出了一个问题:我是因为某种原因而走上了一条固有的糟糕道路,当他们再次咬我时会发现它们的原因,还是嵌套类可能被低估了? 这是我仅将其用于以下两个示例:https : //gist.github.com/3975581-第一个示例帮助我将紧密相关的继承体系保持在一起,第二个示例使我可以向受保护的成员提供访问权限...
9 c#  design 

4
什么是在.NET应用程序中处理引用的最佳方法
最近在工作中,我们遇到了一个问题,我们标记/分支了一个项目,并且由于指向旧文件夹结构的dll /项目引用而遇到了一些编译问题。 我们为每个项目创建了一个“外部bin”文件夹,并将引用的dll复制到这些文件夹中。这是最好的方法还是有专门的行业标准来处理?
9 c# 

4
如果从头开始设计易于使用TDD的新语言,会怎么样?
在使用某些最常见的语言(Java,C#,Java等)时,当您想要完全TDD代码时,有时似乎与该语言存在分歧。 例如,在Java和C#中,您将要模拟类的任何依赖关系,大多数模拟框架将建议您模拟接口而不是类。这通常意味着您有多个接口且只有一个实现(这种效果更加明显,因为TDD会迫使您编写大量较小的类)。让您正确模拟具体类的解决方案可以做一些事情,例如更改编译器或覆盖类加载器等,这很讨厌。 那么,如果从头开始设计一种对TDD来说很棒的语言,它将是什么样?可能是某种语言级别的方式来描述依赖项(而不是将接口传递给构造函数),并且能够不明确地分离类的接口?

4
返回接口或类
假设我有一个方法 public List<User> GetBatchOfUsers(IEnumerable<int> userIDs) { List<User> users = new List<User>(); // some database stuff return users; } 我已经读过,返回一个接口(IList或者IEnumerable)比返回a 更好List。我听到的一些说法是,它隐藏了数据,并使API开发人员可以灵活地在以后更改数据的内部表示形式。 我只返回an的担心IEnumerable是您失去了功能,例如随机访问和Count属性。 我知道接受a IEnumerable作为参数是有意义的,因为它为用户提供了将数据发送到我的方法的最佳灵活性,这是方法操作的最低要求。 返回类型的最佳实践是什么?
9 c#  interfaces  class 

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.