Questions tagged «c#»

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

5
接口的功能编程替代方案是什么?
如果我想以“功能性”风格进行编程,我将用什么替换接口? interface IFace { string Name { get; set; } int Id { get; } } class Foo : IFace { ... } 也许一个Tuple<>? Tuple<Func<string> /*get_Name*/, Action<String> /*set_Name*/, Func<int> /*get_Id*/> Foo; 首先使用接口的唯一原因是,我总是希望某些属性/方法可用。 编辑:有关我在想什么/尝试的更多详细信息。 说,我有一个方法,它具有三个功能: static class Blarf { public static void DoSomething(Func<string> getName, Action<string> setName, Func<int> getId); } 对于BarI 的实例,可以使用此方法: …

3
子链接到父链接-好主意吗?
我有一种情况,我的父母知道这是孩子(duh),但我希望孩子能够引用父母。原因是我希望孩子有能力在感觉到自己时将自己指定为最重要或最不重要。当孩子这样做时,它将移动到父母孩子的顶部或底部。 过去,我曾在孩子身上使用WeakReference属性来引用其父对象,但我觉得这增加了一个烦人的开销,但这也许是最好的方法。 这只是一个坏主意吗?您将如何以不同方式实施此功能? 更新1:添加更多上下文。这是一个渲染系统,因此父容器是组合在一起的窗口列表。子项(窗口)说“我最重要!” 希望基本上呈现在其余窗口的顶部。 父母只是将这些孩子分组在一起的逻辑容器。我可以看到在哪里添加事件以表明请求位于顶部是一个好主意。但是除了实现(孩子想与父母做什么)之外,为什么不希望有child-> parent链接?双向链接列表可以做到这一点,这样人们就可以遍历某物。

4
流利的接口比属性更灵活吗?为什么?
在EF 4.1 Code First教程中,给出了以下代码: public class Department { public int DepartmentId { get; set; } [Required] public string Name { get; set; } public virtual ICollection<Collaborator> Collaborators { get; set; } } 然后说明了流畅的界面更加灵活: 数据批注绝对易于使用,但是最好使用编程方法来提供更大的灵活性。 然后给出使用流畅接口的示例: protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Department>().Property(dp => dp.Name).IsRequired(); modelBuilder.Entity<Manager>().HasKey(ma => ma.ManagerCode); modelBuilder.Entity<Manager>().Property(ma => ma.Name) …
15 c#  coding-style 

6
C#变得更难阅读了吗?
随着C#的进步,添加了许多语言功能。对我来说,它已经变得难以理解了。 作为一个例子,考虑Caliburn.Micro代码下面的代码剪断这里: container = CompositionHost.Initialize( new AggregateCatalog( AssemblySource.Instance. Select(x => new AssemblyCatalog(x)) .OfType<ComposablePartCatalog>() ) ); 现在,这只是一个小例子。 我有几个问题: 这是常见问题还是已知问题? C#社区是否找到相同的东西? 这是语言问题还是开发人员使用的样式? 是否有任何简单的解决方案可以更好地理解其他代码并避免以这种方式编写代码?
15 c#  readability 

5
用于存储数以千万计的对象以进行查询的高效方法,每秒可以插入大量插入?
这基本上是一个日志记录/计数应用程序,它在p2p聊天网络上统计数据包的数量并统计数据包的类型等。这相当于在5分钟内大约有4-6百万个数据包。并且因为我仅对此信息进行“快照”,所以我仅每5分钟删除5分钟之前的数据包。因此,此收藏集中的物品数量上限约为10到1200万。 因为我需要与不同的超级对等方建立300条连接,所以每个数据包都可能尝试插入至少300次(这可能就是为什么将此数据保存在内存中是唯一合理的选择)的可能。 目前,我一直在使用字典来存储此信息。但是由于我要存储的项目太多,所以我遇到了大对象堆的问题,并且随着时间的推移,内存使用量不断增长。 Dictionary<ulong, Packet> public class Packet { public ushort RequesterPort; public bool IsSearch; public string SearchText; public bool Flagged; public byte PacketType; public DateTime TimeStamp; } 我尝试使用mysql,但是它无法跟上我需要插入的数据量(在检查以确保它不是重复的时候),而那是在使用事务时。 我尝试了mongodb,但是该CPU的使用非常疯狂,并且没有保持任何状态。 我的主要问题是每5分钟出现一次,因为我会删除所有早于5分钟的数据包,并对该数据进行“快照”。当我使用LINQ查询来计算包含某种数据包类型的数据包的数量时。我还对数据调用了一个distinct()查询,在该查询中,我从键值对的键中剥离了4个字节(IP地址),并将其与键值对的值中的requestingport值组合在一起,并使用该值来获得不同数量的所有数据包的对等体。 该应用程序当前的内存使用量徘徊在1.1GB左右,并且在调用快照时,它甚至可以使使用量翻倍。 现在,如果我有大量的ram,这将不是问题,但是目前运行此虚拟机的vm仅限于2GB的ram。 有什么简单的解决方案吗?


3
命名空间和类名称准则
当涉及到utils和其他帮助类时,我在正确命名类和服务时遇到问题。 您将如何构造以下内容: EventService.cs EventServiceUtils.cs EventServiceValidators.cs EventServiceCoordinator.cs 等等... 我有与上述服务具有相同需求的多种服务。一种想法是将所有这些都分离到合适的名称空间中,使其看起来像这样: Services.EventService.EventService.cs //(the actual service) Services.EventService.Validators.DateValidator.cs Services.EventService.Validators.ParticipantValidator.cs Services.EventService.Coordinators.ParticipantCoordinator.cs Services.EventService.ExtensionMethods.Extensions.cs 等等。每个命名空间当然都是一个单独的文件夹。但这并不是100%,因为DateValidators其他服务中可能还有更多,这很容易导致不必要的引用。 并且还在Services.EventService.EventService.cs名称空间中包含类名称,这也不好。您可以使用Services.Event.EventService.cs,但是当然已经有一个具有该名称的实体。 这是领域模型。
15 c#  architecture 

6
如果我不了解C#,如何聘请优秀的C#开发人员?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我是C ++开发人员。我知道Windows如何在本机级别上工作,但是我不是C#和.NET的专家。现在,我需要在团队中使用C#开发人员(我所有的开发人员都是C ++)。如果我不熟悉C#,该如何聘请优秀的C#开发人员?如何提出问题,如何测试答案是好的还是愚蠢的错误?
15 c#  c++  hiring 

1
有没有实施和有效应对“混沌猴子”的例子?
杰夫·阿特伍德(Jeff Atwood)最近写了一篇关于Netflix实现“混沌猴子” 的博客文章。这是一篇非常高级的文章。我很好奇是否有人实际实施了该技术来测试系统。 我想我真正想问的是:您采用什么策略来确保您的体系结构能够在系统崩溃的一部分中生存下来?

7
游戏编程:C#还是C ++?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我已经决定我真正想要做的是游戏编程。因此,问题是,作为一个想学习自学编程的18岁孩子,C#和C ++之间最适合的编程语言是什么?(我应该声明我不关心Unix,因为我相信Windows仍将是使用最多的OS) 我知道C ++的基础知识,但不了解C#。我知道C ++有更多的教程指南,dll和类似的东西,而C#则没有,但是学习和使用一个人来开发程序要容易得多,但是即使程序被混淆,我也已经读过很容易找到它的来源。 好吧,我有点想先关注基础知识,我必须说我偏爱C ++,只是因为它对我来说更合适,但我必须考虑我一个人工作。因此,即使我喜欢它,也不是最好的选择。 我真的不确定要去哪一个,我已经在各种网站上阅读了很多线程,而且看来C#比C ++越来越流行。但是,是的,我也指定我要进行游戏编程。因此,我需要知道一些不仅是“由于C.没有C ++,因为.net内存处理而使C#更容易”的更好的要点,因为我无法找到它。

4
将线程/后台工作者放在一类中是“错误的” /错误的设计吗?
我有一个可以从Excel中读取的类(C#和.Net 4),在该类中,我有一个后台工作程序,该工作程序将从Excel加载数据,同时UI可以保持响应。我的问题如下:在班级中有一名后台工作人员是不好的设计吗?我是否应该在没有该类的情况下创建我的课程,并使用后台工作者对该课程进行操作?我看不到以这种方式创建课程的任何问题,但是我还是新手,所以我认为在继续之前必须确定。 我希望这个问题在这里有意义,因为我认为在我的代码正常工作时,它不应该出现在stackoverflow上,这只是一个设计问题。

13
异步并等待-轮询替代方案
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 既然我们知道了c#5的存储内容,显然还有一个机会可以影响我们由Anders Heijsberg昨天在PDC10上宣布的两个“ 异步 ” 新关键字的选择。 async void ArchiveDocuments(List<Url> urls) { Task archive = null; for(int i = 0; i < urls.Count; ++i) { var document = await FetchAsync(urls[i]); if (archive != null) await archive; archive = ArchiveAsync(document); } } 埃里克·利珀特(Eric Lippert)对当前两个关键字的选择以及在可用性研究中被误解的方式进行了解释。这些评论还有其他一些主张。 请-每个答案一个建议,重复将被取消。
15 c#  naming 

3
拥有纯POCO模型有什么好处?
拥有纯POCO模型的主要好处是什么?我认为模型应该简洁明了,但是我倾向于将维护子对象保留在模型类中。例如,如果我有一个,ClassA并且ClassB定义如下: public class ClassA { public string MyProp { get; set; } public IEnumerable<ClassB> Children { get; } public void AddChild(ClassB newChild) { /*... */ } public void RemoveChild(ClassB child) { /* ... */ } } public class ClassB { public string SomeProp { get; set; } } 拥有add和remove方法有天生的错误吗?我是否应该只公开列表并允许客户端代码添加任何传递简单数据验证职责的内容,例如不为null,并且不重复其他类? 感谢您的帮助。
15 c#  .net  poco 

4
如果我们产生datareader行而不读取所有记录,数据库连接会关闭吗?
在了解yield关键字的工作原理的同时,我遇到了StackOverflow 上的link1和link2,它主张yield return在DataReader 上进行迭代时使用它,它也适合我的需求。但是,这使我感到奇怪,如果发生如下情况,如果我yield return按如下所示使用,并且如果我不遍历整个DataReader,那么数据库连接会永远保持打开状态吗? IEnumerable<IDataRecord> GetRecords() { SqlConnection myConnection = new SqlConnection(@"..."); SqlCommand myCommand = new SqlCommand(@"...", myConnection); myCommand.CommandType = System.Data.CommandType.Text; myConnection.Open(); myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection); try { while (myReader.Read()) { yield return myReader; } } finally { myReader.Close(); } } void AnotherMethod() { foreach(var rec in GetRecords()) { i++; …
15 c#  database  .net  resources 

1
科学计算库的单元测试
我以前在单元测试中有过一些经验,我称之为(不是贬义)经典的软件工程项目:MVC,带有用户GUI,数据库,中间层的业务逻辑等。现在,我我用C#编写了一个科学计算库(是的,我知道C#太慢了,使用C,不要重新发明轮子,所有这些,但是我们有很多人在C#中从事科学计算,我们有点需要)。就软件开发行业而言,这是一个小项目,因为我主要是自己写这篇文章,有时是在一些同事的帮助下编写的。另外,我并没有为此获得报酬,最重要的是,这是一个学术项目。我的意思是,我希望它有一天能达到专业水平,因为我正计划开源。 无论如何,该项目正在变得越来越庞大(大约18,000行代码,对于一个人的项目而言,我认为这是很大的),而且它也变得一发不可收拾。我正在使用git进行源代码控制,我认为我还不错,但是我正在像老派一样进行测试,我的意思是编写编写测试系统大部分内容的完整控制台应用程序,主要是因为我不知道如何在这种情况下进行单元测试,尽管我认为那是我应该做的。问题在于该库主要包含算法,例如图算法,分类器,数值解算器,随机分布等。我只是不知道如何为每种算法指定微小的测试用例,因为其中很多是随机的,我不知道如何验证正确性。例如,对于分类,有一些指标,例如精度和召回率,但是这些指标对于比较两种算法比判断一种算法更好。那么,如何在这里定义正确性? 最后还有性能问题。我知道它是一套完全不同的测试,但是性能是科学工具的重要功能之一,而不是用户满意度或其他软件工程指标。 我最大的问题之一是数据结构。我可以针对kd-tree进行的唯一测试是压力测试:插入许多随机向量,然后执行许多随机查询,然后与朴素的线性搜索进行比较。性能相同。使用数值优化器,我可以测试基准功能,但是再次,这是压力测试。我不认为这些测试可以归类为单元测试,最重要的是,它们不能连续运行,因为其中大多数都很繁重。但是我也认为这些测试需要完成,我不能只插入两个元素,弹出根,是的,它适用于0-1-n的情况。 那么,这种软件的(单元)测试方法是什么(如果有)?以及如何围绕代码-构建-提交-集成周期组织单元测试和繁重的单元测试?
15 c#  unit-testing 

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.