Questions tagged «c#»

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

5
从Winforms迁移到WPF [关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我是一位经验丰富的Windows Forms开发人员,但是现在该搬到WPF了,因为一个新的WPF项目即将来临,而且我只有很短的准备时间来准备学习WPF。 有经验的Winforms开发人员的最佳方法是什么? 您能给我一些在短时间内学习WPF的提示和建议吗? 是否有简单的WPF示例解决方案和简短的(视频)教程?您推荐哪些书?www.windowsclient.net是一个好的起点吗?微软官方网站有替代品吗?
26 c#  .net  windows  wpf  winforms 

3
为什么.net中没有OrderedDictionary的通用实现?
Microsoft为什么不提供OrderedDictionary的通用实现? 我见过一些自定义实现,包括:http : //www.codeproject.com/KB/recipes/GenericOrderedDictionary.aspx 但是,为什么Microsoft不将其包含在基本.net库中?当然,他们有理由不构建泛型。...但这是什么? 在发布此消息之前,我确实看到了:https : //stackoverflow.com/questions/2629027/no-generic-implementation-of-ordereddictionary 但这只是证实它不存在。不是为什么它不存在。 谢谢
26 c#  .net 

4
为什么开发团队会坚持认为在Visual Studio中对多个项目使用单个解决方案会“增加相互依赖的复杂性”?
我正在帮助管理一个外部团队,他们正在开始开发某些现有产品的新版本。从历史上看,该团队一直在单个解决方案中使用单个项目的模型来处理Visual Studio中的大约30个模块,这些模块一起产生可部署的内部版本。 这会对构建可靠性和质量产生不利影响,因为它们并不总是向我们发送最新的源代码。我们试图让他们将所有引用的代码统一到一个解决方案中,但是我们遇到了一些阻力-特别是他们一直在谈论如果将所有内容都放置在模块之间,模块之间的相互依赖性(在Visual Studio中为“项目”)会增加。一个解决方案文件。单独解决方案中的代码均未在其他地方使用。 我坚持这是胡说八道,良好的开发模式将避免任何此类问题。 有问题的团队还对现有产品进行错误修复和新功能开发,至少可以说,其经验不足以解决多个解决方案的完全相同的问题。我们一直被拒绝访问其源代码管理(TFS),而我们采用的统一代码库的方法是尝试并至少减少丢失的更新数量,而不是偶尔进行回归(是的,固定的错误正越来越-产品介绍),说“向我们发送整个解决方案文件夹的ZIP文件,这样我们就可以解压缩,在Visual Studio中打开它,然后按F5 “用于测试”。在总体结构和质量方面,该代码非常差且难以支持。这种经验就是为什么我希望尽可能早地在开发周期中使工作流程正确。 有什么我想念的吗?是否有充分的理由将所有代码分开?为了我的钱,它必须是一个令人信服的理由,这将是常识,但是我更愿意承认我并不了解一切。

5
一个实例可以等于某个更特定类型的其他实例吗?
我读过这篇文章:如何用Java编写平等方法。 基本上,它为支持继承的equals()方法提供了一种解决方案: Point2D twoD = new Point2D(10, 20); Point3D threeD = new Point3D(10, 20, 50); twoD.equals(threeD); // true threeD.equals(twoD); // true 但这是个好主意吗?这两个实例看起来是相等的,但可能具有两个不同的哈希码。是不是有点不对劲? 我相信这可以通过改用操作数来更好地实现。
25 java  c#  scala  comparison 

7
指定可选参数名称,即使不是必需的?
请考虑以下方法: public List<Guid> ReturnEmployeeIds(bool includeManagement = false) { } 和以下调用: var ids = ReturnEmployeeIds(true); 对于刚接触该系统的开发人员来说,很难猜得出是什么true。您要做的第一件事是将鼠标悬停在方法名称上或转到定义(都不是丝毫大的任务)。但是,出于可读性考虑,编写以下代码是否有意义: var ids = ReturnEmployeeIds(includeManagement: true); 在编译器不需要您时,是否有任何地方正式讨论是否明确指定可选参数? 以下文章讨论了某些编码约定:https : //msdn.microsoft.com/zh-cn/library/ff926074.aspx 与上面的文章类似的东西会很棒。

4
如何处理不可变字段上的setter?
我有一堂课有两个readonly int领域。它们作为属性公开: public class Thing { private readonly int _foo, _bar; /// <summary> I AM IMMUTABLE. </summary> public Thing(int foo, int bar) { _foo = foo; _bar = bar; } public int Foo { get { return _foo; } set { } } public int Bar { get { return …

8
我的顺序收集应该从索引0还是索引1开始?
我正在为具有多个通道的设备创建对象模型。客户和我之间使用的名词是Channel和ChannelSet。(“集合”在语义上不准确,因为它是有序的,而正确的集合不是。但这在不同的时间是个问题。) 我正在使用C#。这是一个用法示例ChannelSet: // load a 5-channel ChannelSet ChannelSet channels = ChannelSetFactory.FromFile("some_5_channel_set.json"); Console.Write(channels.Count); // -> 5 foreach (Channel channel in channels) { Console.Write(channel.Average); Console.Write(", "); } // -> 0.3, 0.3, 0.9, 0.1, 0.2 一切都是花花公子。 但是,客户端不是程序员,它们绝对会被零索引混淆-第一个通道是它们的通道1。但是,为了与C#保持一致,我想将ChannelSet索引从零开始。 当我的开发团队和客户进行交互时,这肯定会导致他们之间的脱节。但更糟糕的是,在代码库中如何处理此问题的任何不一致都是潜在的问题。例如,这是一个UI屏幕,最终用户(根据1个索引进行思考)正在编辑频道13: 该Save按钮最终将产生一些代码。如果ChannelSet索引为1: channels.GetChannel(13).SomeProperty = newValue; // notice: 13 或如果它的索引为零: channels.GetChannel(12).SomeProperty = newValue; // notice: 12 我不确定如何处理。我觉得这是个好习惯,即使有序的,整数索引的事物列表(ChannelSet)与C#Universe中的所有其他数组和列表接口保持一致(通过零索引ChannelSet)。但是,然后,UI和后端之间的每一段代码都需要翻译(减1),我们都知道隐患和常见的一对一错误已经是多么的隐秘。 …

1
使用Reactive Extensions进行异步网络编程
该问题是从Code Review Stack Exchange 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 5年前。 socket多年前(以基于事件的异步模式(EAP)方式)进行了一些(或多或少)“低级”异步编程之后,最近又将其“升级”到了TcpListener(异步编程模型(APM)),然后尝试转到async/await(基于任务的异步模式(TAP))时,我不得不忍受所有这些“低级管道”的困扰。所以我在想;为什么不试一试RX(Reactive Extensions),因为它可能更贴近我的问题领域。 我编写的代码很多,许多客户端通过Tcp连接到我的应用程序,然后启动双向(异步)通信。客户端或服务器可以随时决定是否需要发送消息,所以这不是您的经典request/response设置,而是更多的实时,双向,“线路”开放给双方以发送他们想要的任何内容,只要他们想要。(如果有人用一个得体的名字来形容这一点,我将很高兴听到它!)。 每个应用程序的“协议”有所不同(并且与我的问题并不相关)。我确实有,但是有一个最初的问题: 假设只有一个“服务器”正在运行,但是它必须跟踪许多(通常是数千个)连接(例如客户端),每个连接都有(由于缺乏更好的描述)自己的“状态机”来跟踪其内部状态等,您更喜欢哪种方法?EAP / TAP / APM?RX甚至可以考虑吗?如果没有,为什么? 因此,我需要使用Async,因为a)它不是请求/响应协议,所以我不能在“等待消息”阻止调用或“发送消息”阻止调用中使用线程/客户端(但是,如果发送是仅阻止该客户端,我可以忍受它)b)我需要处理许多并发连接。我看不到使用阻塞调用(可靠地)执行此操作的方法。 我的大多数应用程序都与VoiP相关;无论是来自SIP 科学家的 SIP消息,还是来自FreeSwitch / OpenSIPS等应用程序的PBX(相关)消息,但是您可以以最简单的形式尝试想象一个“聊天”服务器尝试处理许多“聊天”客户端。大多数协议都是基于文本的(ASCII)。 因此,在实现了上述技术的许多不同排列之后,我想通过创建一个对象来简化我的工作,该对象可以简单地实例化,告诉它在哪IPEndpoint听,并在发生任何感兴趣的事情时告诉我(通常我通常会这样做)使用事件,因此通常将某些EAP与其他两种技术混合使用)。该类不应费力尝试“理解”协议。它应该只处理传入/传出的字符串。因此,我着眼于RX希望(最终)可以简化工作,我从头开始创建了一个新的“小提琴”: using System; using System.Collections.Concurrent; using System.Net; using System.Net.Sockets; using System.Reactive.Linq; using System.Text; class Program { static void Main(string[] args) { var f = new …
25 c#  .net  tcp 


6
如何修复基本上没有结构的项目?
我从事一个软件项目(主要是单独工作)已有5年以上。首先是一团糟(我是从事此工作的第三或第四位开发人员),尽管现在已不再是一团糟,但它仍然杂乱无章。使它得到控制的进展速度令人不寒而栗,我开始对它所处的状态感到沮丧。我如何真正开始修复它? 项目细节:这是一个销售程序,几乎完全用Visual Basic Classic(VB6)编写,带有MySQL后端和用C#编写的报表引擎。C#报表模块非常有趣,它只是在过去的几年中编写的,而在此之前所有报表都是在Crystal Reports 9中完成的(是的,我们仍然有一些报表依赖于此)。 但是,实际程序本身就是一场彻底的灾难。总的LOC数不足9万,注释约有1万行(大多数不是文档,而是注释掉的旧代码)。158个表单文件和80个模块文件。我不知道实际使用了多少个,因为程序的某些功能被简单地弃用了(有时是这样),而没有从程序中删除相关的代码。我猜想只有50%的代码可以实际用于生产。 我害怕触碰很多代码,只是因为我不确定我是否正在破坏一个晦涩的客户所依赖的东西,这种情况发生的次数超出了我的估计。就像整个代码中散布着地雷一样。 该项目实际上没有任何结构。到目前为止,除了在我耐心改革的几个地方之外,它不是面向对象的。如果需要在表单上获取数据,则可以实例化数据库对象,然后在函数中声明查询,然后执行查询并对数据集执行操作。 当我开始从事该项目时,没有使用任何源代码控制。我试图鼓励其他正在使用它的人使用它,但是我是新手,试图让人们使用Subversion的尝试全部失败了。该公司的首席开发人员在过去的几年中终于发现了一个软错误,并且他确保所有开发人员现在确实在所有项目上使用了源代码控制,因此至少可以取得一些进展。 我认为,如果我能够全职进行该项目的改革,我将能够取得不错的进展,甚至可以估算出我完成整个项目所需的时间,但是该项目正在积极使用中,我经常被要求扑灭火灾,修复错误,添加功能等。 那么,我如何开始真正解决这个问题呢?尝试使用其他语言来工具VB6吗?尝试在业余时间重写程序吗?还是这完全没有希望? 更新资料 这篇文章发表后,我怀着新的热情回到了这个项目,但是在看到如此缓慢的进展之后,在几个月内又陷入了绝望。然后,在接下来的一年左右的时间里,我又重复了此循环2到3次。 从那以后,我转到了另一份工作。尽管经过了很多年的vb6,并且只有其他技术的外围经验,但是搜索仍然很困难,而且我在此过程中遇到了很多拒绝(一年中约十二次采访)。在这种情况下,我对他人的建议是考虑单独考虑这一因素。考虑保持这样的死胡同对您的职业可能造成的损害。

5
用于iPhone / iPod / iPad开发的MonoTouch与Objective-C [关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 对于具有.Net经验并希望为iPhone / iPod / iPad开发的人来说,值得学习Objective-C吗?MonoTouch是一个不错的选择吗?在Objective-C中使用MonoTouch与编码时要进行哪些取舍?
25 c#  .net  iphone  objective-c 

7
读这些书的正确顺序是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我是一名初级C#开发人员,我在家学习,现在我找到了第一份工作:) 我想买这些书。但是读这些书的正确顺序是什么? 代码完成:软件构建实用手册 干净的代码:敏捷软件工艺手册 实用程序员
25 c#  learning  books 

1
建议创建常数类的最佳实践
此问题已从Code Review Stack Exchange 迁移,因为可以在Software Engineering Stack Exchange上回答。 迁移 5年前。 我的团队成员之间有一个关于常量类声明的辩论。我们将常量变量移到一个单独的类中,如下所示。 public class Constants { public const string StateId = "ST"; public const string CountryId = "CI"; } 我的一些团队成员建议我们将类声明为密封的,以避免覆盖选项,还有一些建议我们将其标记为静态,以避免创建Constant类的实例。 但是,我更喜欢使用静态构造函数将其作为Sealed,因为它将帮助我们在将来需要时初始化只读变量。请给我们一些建议。
25 c#  class 

6
您为什么要“等待”一个方法,然后立即查询它的返回值?
在本文中,提供了以下示例代码(为简便起见,对其进行了略作编辑): public async Task<ActionResult> Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Department department = await db.Departments.FindAsync(id); if (department == null) { return HttpNotFound(); } return View(department); } 该FindAsync方法Department通过其ID 检索对象,并返回Task<Department>。然后立即检查部门以查看其是否为空。据我了解,以这种方式要求Task的值将阻止代码执行,直到返回了来自waited方法的值,从而有效地使它成为同步调用。 你为什么要这样做?Find(id)如果您要立即阻止,仅调用sync方法不是更简单吗?
24 c#  .net  asp.net-mvc  async 

5
如何在C#中的不可变对象之间建立循环引用?
在下面的代码示例中,我们有一个表示房间的不可变对象的类。北,南,东和西代表进入其他房间的出口。 public sealed class Room { public Room(string name, Room northExit, Room southExit, Room eastExit, Room westExit) { this.Name = name; this.North = northExit; this.South = southExit; this.East = eastExit; this.West = westExit; } public string Name { get; } public Room North { get; } public Room South { …

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.