草庐IT

c# - 有没有比在构造函数中作为参数发送更好的方法来设置大量必需的属性?

我有一个类,为了完成它的工作需要设置8个不同的属性值。我想确保在尝试执行方法之前设置了所有8个属性。我目前已经通过构造函数传入并设置了所有参数。有更好的方法吗? 最佳答案 您可以允许在不指定所有属性值的情况下创建对象,然后如果在对象状态对于要执行的方法调用有效之前调用该方法,则该方法将抛出InvalidOperationException,这在这种情况意味着所有8个属性都将具有有效值。这样您就可以为消费者提供更多的灵active。它可以在某个时刻创建一个新实例,在另一个时刻设置它的属性,然后才调用该方法。这是一个通过.NET代码库使

c# - “If” 条件是否比 ??和类型转换

对于相同的功能,我有以下两种方法-一种使用“if”条件,另一种使用“??和类型转换”。哪种方法更好?为什么?代码:Int16?reportID2=null;//Othercode//Approach1if(reportID2==null){command.Parameters.AddWithValue("@report_type_code",DBNull.Value);}else{command.Parameters.AddWithValue("@report_type_code",reportID2);}//Approach2command.Parameters.AddWithVal

c# - DateTime.ParseExact() 比 DateTime.Parse() 快吗

我想知道ParseExact是否比Parse快。我认为它应该是ParseExact,因为您已经提供了格式,但我也认为所有对文化信息的检查都会减慢它的速度。微软是否在任何文件中说明了两者之间的性能差异。要使用的格式是通用的“yyyy/MM/dd”格式。例如:DateTime.Parse(DateText);DateTime.ParseExact(DateText,"yyyy/MM/dd",CultureInfo.InvariantCulture); 最佳答案 您要求两种功能不同(接近但仍然不同)的方法在速度上存在差异。只需选择最合适的

c# - Parallel Linq - 使用比处理器更多的线程(对于非 CPU 绑定(bind)任务)

我正在使用并行linq,我正在尝试使用如下基本代码同时下载许多url:intthreads=10;Dictionaryresults=urls.AsParallel(threads).ToDictionary(url=>url,url=>GetPage(url);由于下载网页受网络限制而不是CPU限制,因此使用比我的处理器/内核数量更多的线程是非常有益的,因为每个线程的大部分时间都花在等待网络catch。然而,根据在我的双核机器上运行threads=2与threads=10具有相同性能的事实判断,我认为发送到AsParallel的线程数受限于核心数。有什么方法可以覆盖这种行为吗?是否有

c# - 为什么在 .NET 中转换比反射快?

我有一个事件处理程序,它需要确定类型并在匹配特定类型时执行代码。最初我们将它转​​换为一个对象,如果它不为空,我们就执行代码,为了加快速度,我使用了反射,但它实际上减慢了它的速度,我不明白为什么。这是一个代码示例Trace.Write("StartingusingReflection");if(e.Item.GetType()==typeof(GridDataItem)){boolisWatch=Convert.ToBoolean(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["IsWatch"]);if(isWatch){

c# - 比 var 更好的推断变量的词

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。这可能会被关闭,但我还是会尝试。前几天我向一位VB6程序员展示了我的一些C#代码,他注意到了var关键字并且说“哦,一个变体类型,当你这样做时,它并不是真正的强类型。”我不得不继续典型的“var!=VARIANT”演讲来向他解释这不是它只是编译器推断的变体。我在考虑他们(C#团队)可以使用的其他词,这样这种事情就不会发生。我个人喜欢infer,比如:in

c# - 为什么 StringBuilder 比字符串连接慢?

为什么StringBuilder比+连接更慢?StringBuilder旨在避免创建额外的对象,但为什么会降低性能?staticvoidMain(string[]args){intmax=1000000;for(inttimes=0;times编辑:按照建议移出范围变量: 最佳答案 更改以便StringBuilder不会一直实例化,而是.Clear()它:time:1String+:3348msStringBuilder:3151mstime:2String+:3346msStringBuilder:3050ms等请注意,这仍然会测

c# - 为什么二进制序列化比 xml 序列化更快?

为什么二进制序列化被认为比xml序列化更快? 最佳答案 考虑序列化double例如:二进制序列化:从内存地址向流写入8字节二进制反序列化:读取相同的8个字节xml序列化:写入标记、转换为文本、写入结束标记-几乎是I/O的三倍和1000倍的CPU利用率xml反序列化:标签读取/验证、读取字符串并将其解析为数字、结束标签的读取/验证。I/O开销略多,CPU开销多一些 关于c#-为什么二进制序列化比xml序列化更快?,我们在StackOverflow上找到一个类似的问题:

c# - 使用正则表达式比使用 IndexOf 更快吗?

我有一个正在运行的应用程序,它查看队列中的项目,然后根据某些关键字应用一个类别-然后将其插入数据库。我正在使用IndexOf来确定某个关键字是否存在。这是理想的方式还是RegEX会更快?每秒大约处理10个项目。 最佳答案 对于仅查找关键字,IndexOf方法比使用正则表达式更快。正则表达式很强大,但它们的力量在于灵active,而不是原始速度。它们在简单的字符串操作中没有击败字符串方法。无论如何,如果字符串不是很大,那应该没什么关系,因为您不会经常这样做。 关于c#-使用正则表达式比使用

c# - 接口(interface)的扩展方法是否被视为比不太具体的方法优先级低?

我有以下扩展类:publicstaticclassMatcherExtensions{publicstaticExecMatcherMatch(thisTupleitem){returnnewExecMatcher(item.Item1,item.Item2);}publicstaticExecMatcherMatch(thisITupleMatchableitem){vartuple=item.PropertiesToMatch;returnnewExecMatcher(tuple.Item1,tuple.Item2);}publicstaticExecMatcherMatch(th