Questions tagged «c#»

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

2
使用where条件vs Continue保护子句过滤foreach循环
我已经看到一些程序员使用此: foreach (var item in items) { if (item.Field != null) continue; if (item.State != ItemStates.Deleted) continue; // code } 而不是我通常使用的位置: foreach (var item in items.Where(i => i.Field != null && i.State != ItemStates.Deleted)) { // code } 我什至看到了两者的结合。我真的很喜欢“继续”的可读性,尤其是在更复杂的条件下。性能上甚至有差异吗?通过数据库查询,我假设会有。常规列表呢?

3
如何诊断异步/等待死锁?
我正在使用大量使用异步/等待的新代码库。我团队中的大多数人对于异步/等待也是相当陌生的。我们通常倾向于遵循Microsoft指定的最佳实践,但是通常需要我们的上下文来传递异步调用并使用不支持的库ConfigureAwait(false)。 结合所有这些内容,我们每周都会遇到文章中描述的异步死锁。它们不会在单元测试期间显示,因为我们的模拟数据源(通常通过Task.FromResult)不足以触发死锁。因此,在运行时或集成测试期间,某些服务调用只会吃到午餐,再也不会返回。那会杀死服务器,并且通常使事情变得一团糟。 问题在于,要跟踪错误的出处(通常只是一直不完全同步),通常涉及手动代码检查,这很耗时且无法自动化。 诊断死锁的更好方法是什么?
24 c#  debugging  async 

5
我对显式强制转换运算符的使用是否合理?
我有一个大对象: class BigObject{ public int Id {get;set;} public string FieldA {get;set;} // ... public string FieldZ {get;set;} } 还有一个专门的,类似于DTO的对象: class SmallObject{ public int Id {get;set;} public EnumType Type {get;set;} public string FieldC {get;set;} public string FieldN {get;set;} } 我个人发现了将BigObject显式转换为SmallObject的概念-知道这是一种单向丢失数据的操作-非常直观且易读: var small = (SmallObject) bigOne; passSmallObjectToSomeone(small); 它使用显式运算符实现: public static explicit operator …

5
在哪种情况下,'uint'和'short'数据类型比标准int(32)更合适?
我了解它们可以代表的能力和价值观的差异,但似乎人们总是在使用Int32,无论它是否合适。似乎没有人使用无符号版本(uint),尽管很多时候它更适合使用,因为它描述的值不能为负(也许代表数据库记录的ID)。同样,似乎没有人使用short/Int16该值所需的容量。 客观地说,在那里的情况下最好是使用uint或short/Int16如果是这样,这是他们?
24 c# 

6
为什么不将Java用作构建语言?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 如果Java是一种通用语言,而构建程序可以用Java语言来描述,那么为什么这不是编写构建文件的最佳方法,而是使用Ant,Maven和Gradle之类的工具呢?那不是更直接,而且不需要学习另一种编程语言吗?(顺便说一句-这个问题也可以应用于其他语言,例如C#)
24 java  c#  builds  build-system 

5
加载应用程序设置的最佳方法
保留Java应用程序设置的一种简单方法是使用扩展名为“ .properties”的文本文件表示,该文件包含与特定值(此值可以是数字,字符串,日期等)关联的每个设置的标识符。 。C#使用类似的方法,但文本文件必须命名为“ App.config”。在这两种情况下,都必须在源代码中初始化一个特定的类来读取设置:此类具有一种方法,该方法返回与指定的设置标识符关联的值(作为字符串)。 // Java example Properties config = new Properties(); config.load(...); String valueStr = config.getProperty("listening-port"); // ... // C# example NameValueCollection setting = ConfigurationManager.AppSettings; string valueStr = setting["listening-port"]; // ... 在这两种情况下,我们都应该解析从配置文件加载的字符串,并将转换后的值分配给相关的类型化对象(在此阶段可能发生解析错误)。解析步骤之后,我们必须检查设置值是否属于特定的有效域:例如,队列的最大大小应为正值,某些值可能是相关的(例如:min <max ), 等等。 假设应用程序应在启动时立即加载设置:换句话说,应用程序执行的第一个操作是加载设置。设置的任何无效值必须自动替换为默认值:如果一组相关设置发生这种情况,则这些设置都将设置为默认值。 执行这些操作的最简单方法是创建一个方法,该方法首先解析所有设置,然后检查加载的值,最后设置任何默认值。但是,如果使用这种方法,维护将很困难:随着开发应用程序时设置数量的增加,更新代码变得越来越困难。 为了解决此问题,我想到了如下使用“ 模板方法”模式。 public abstract class Setting { protected abstract bool TryParseValues(); protected …

8
使用分部类实现“模块化”是否很常见?
我最近在我们的代码库中遇到了一个情况,一个不同的团队创建了一个“神类”,其中包含约800个方法,并作为部分类分为135个文件。 我问了另一个团队。尽管我的直觉是从轨道上取笑,但他们坚持认为这是一种好的设计,是一种惯例,并且它促进了“模块化”和“易于实现”,因为新开发人员可以在几乎不了解其余知识的情况下使用功能系统的。 这实际上是常见的做法还是任何一个好主意?我倾向于立即采取措施降低这头野兽的生命(或至少阻止它进一步成长),但我愿意相信自己是错的。
24 c#  .net 

9
增加复杂性以删除重复的代码
我有几个类都从通用基类继承。基类包含一些类型为的对象的集合T。 每个子类都需要能够从对象集合中计算插值,但是由于子类使用不同的类型,因此每个类之间的计算差异很小。 到目前为止,我已经在每个类之间复制/粘贴了我的代码,并对每个代码进行了较小的修改。但是现在我试图删除重复的代码,并在我的基类中将其替换为一种通用插值方法。但是,事实证明这非常困难,而且我所想到的所有解决方案似乎都太复杂了。 我开始认为DRY原则在这种情况下不太适用,但这听起来像是亵渎神灵。尝试删除代码重复时有多少复杂性? 编辑: 我能想到的最好的解决方案是这样的: 基类: protected T GetInterpolated(int frame) { var index = SortedFrames.BinarySearch(frame); if (index >= 0) return Data[index]; index = ~index; if (index == 0) return Data[index]; if (index >= Data.Count) return Data[Data.Count - 1]; return GetInterpolatedItem(frame, Data[index - 1], Data[index]); } protected abstract T GetInterpolatedItem(int …

9
适用于C#开发人员的C ++
我非常了解C#(自学成才,可悲),并且需要为Windows应用程序进行一些C ++编程。对于能够学习C#的C ++开发人员,我已经找到了很多信息,但是当您已经了解C#时,就没有太多关于学习C ++的信息。有没有人遇到过一个很好的基础知识? MSDN可以进行比较,但是比较不深入。 我可以整理几个来源,但发现其中有些东西-我只是找不到。谢谢你的帮助。
24 c#  c++ 

2
什么时候使用表达式身体强壮的成员?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 C#6引入了表达式主体成员,这些成员允许仅返回表达式结果的方法和属性中的简化代码: public override string ToString() { return string.Format("{0} {1}", _field1, _field2); } 变成: public override string ToString() => string.Format("{0} {1}", _field1, _field2); 由于我们现在有两种完全等效且有效的语法,因此必须使用一些经验法则来决定使用哪种语法。新的替代方法何时合适?
24 c# 

4
异步+等待==同步?
偶然发现了有关发出异步Web请求的帖子。 除了简单性之外,如果在现实世界中,您所要做的就是发出一个异步请求并在下一行等待它,这与首先发出一个同步调用不是一样吗?

3
在C#中,为什么在try块内声明的变量的作用域受到限制?
我想将错误处理添加到: var firstVariable = 1; var secondVariable = firstVariable; 以下内容无法编译: try { var firstVariable = 1; } catch {} try { var secondVariable = firstVariable; } catch {} 为什么try catch块必须像其他代码块一样影响变量的范围?除了保持一致性之外,对于我们而言,无需重构就能够使用错误处理包装代码是否有意义?

1
为什么.Net中的数组具有Length,而其他集合类型具有Count?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 例如,在C#中,数组具有Length属性。但是其他收集类型(如列表等)具有Count属性。这两个有何不同的原因吗?如果是这样,我想知道。

6
类使用其自己的公共方法可以吗?
背景 我目前遇到一种情况,即我有一个设备同时发送和接收的对象。该消息具有以下几种构造: public void ReverseData() public void ScheduleTransmission() 该ScheduleTransmission方法需要调用ReverseData时,它被称为方法。但是,有时我需要从应用程序中实例化对象的地方进行ReverseData外部调用(并且应该完全在命名空间之外添加)。 至于“接收”,我的意思是ReverseData将在object_received事件处理程序中从外部调用该请求以撤消数据。 题 对象调用其自己的公共方法通常可以接受吗?

6
在TDD中,我必须首先编写“测试”还是“接口”?
我正在使用c#学习TDD,据我所知测试应该驱动开发,即在编写最基本的代码以通过测试之后再进行重构,然后首先编写一个失败的测试。 但是也有人说“ 程序到接口,而不是实现 ”,因此请首先编写一个接口。这是我开始困惑的地方,如果我先写接口,那将违反两件事 为接口编写的代码不受test的驱动。 这显然不是最低要求,我可以用一个简单的类编写它。 我也应该从编写接口测试开始吗?没有任何实现,我要测试什么? 如果这个问题听起来很傻,对此我感到非常困惑。可能是我从字面上讲。
23 c#  unit-testing  tdd 

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.