Questions tagged «c#»

C#(发音为“ See Sharp”)是由Microsoft开发的一种高级,静态类型的多范例编程语言。C#代码通常针对Microsoft的.NET系列工具和运行时,其中包括.NET Framework,.NET Core和Xamarin。使用此标记可解决有关用C#或C#正式规范编写的代码的问题。

1
使用'+'运算符的字符串连接
查看string类元数据,我只看到运算符==和!=重载。那么如何为' +'运算符执行级联呢? 编辑: Eric Lippert关于字符串连接的一些有趣的注释: 第1部分 第2部分 第2部分还提到了Joel的一篇超级文章(http://www.joelonsoftware.com/articles/fog0000000319.html)
86 c#  .net  string 

2
用double替换int时Visual Studio长时间编译
我的VS2013 Ultimate副本将这段代码编译60秒钟以上: class Program { static void Main(string[] args) { double dichotomy = Dichotomy( d => { try { int size = (int) d; byte[] b = new byte[size]; return -b.Length; } catch (Exception) { return 0; } }, 0, int.MaxValue, 1); Console.WriteLine(dichotomy); Console.ReadKey(); } private static double Dichotomy( Func<double, …

10
从引用的回复中解析电子邮件内容
我试图弄清楚如何从可能包含的所有引用的回复文本中解析出电子邮件的文本。我注意到,通常电子邮件客户会在“某某某某日期写某某某日”或在行前加尖括号。不幸的是,并不是每个人都这样做。有人对如何以编程方式检测回复文本有任何想法吗?我正在使用C#编写此解析器。
86 c#  ruby  email  email-parsing 

10
使用Linq to Entities的“ Contains()”解决方法?
我正在尝试创建一个查询,该查询使用Silverlight ADO.Net数据服务客户端api(并因此使用Linq To Entities)在where子句中使用ID列表。有人知道不支持“包含”的解决方法吗? 我想做这样的事情: List<long?> txnIds = new List<long?>(); // Fill list var q = from t in svc.OpenTransaction where txnIds.Contains(t.OpenTransactionId) select t; 试过这个: var q = from t in svc.OpenTransaction where txnIds.Any<long>(tt => tt == t.OpenTransactionId) select t; 但是得到了“不支持方法'Any'”。

2
为什么在Roslyn中使用异步状态机类(而不是结构)?
让我们考虑一下这个非常简单的异步方法: static async Task myMethodAsync() { await Task.Delay(500); } 当我使用VS2013(Roslyn之前的编译器)进行编译时,生成的状态机是一个结构。 private struct <myMethodAsync>d__0 : IAsyncStateMachine { ... void IAsyncStateMachine.MoveNext() { ... } } 当我使用VS2015(Roslyn)进行编译时,生成的代码是这样的: private sealed class <myMethodAsync>d__1 : IAsyncStateMachine { ... void IAsyncStateMachine.MoveNext() { ... } } 如您所见,罗斯林生成一个类(而不是一个结构)。如果我没有记错的话,旧编译器中异步/等待支持的第一个实现(我猜是CTP2012)也会生成类,然后出于性能原因将其更改为struct。(在某些情况下,您可以完全避免装箱和分配堆…)(请参阅此) 有谁知道为什么在罗斯林再次改变了这一点?(对此我没有任何问题,我知道此更改是透明的,不会更改任何代码的行为,我很好奇) 编辑: 来自@Damien_The_Unbeliever(和源代码:))的答案可以解释一切。Roslyn的描述的行为仅适用于调试构建(由于注释中提到了CLR限制,因此需要这样做)。在Release中,它还会生成一个结构(具有所有好处。)。因此,这似乎是一个非常聪明的解决方案,可以同时支持“编辑”和“继续”以及更好的生产性能。有趣的东西,谢谢大家参加!

7
使用C#和RhinoMocks进行测试驱动开发的最佳实践
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 为了帮助我的团队编写可测试的代码,我提出了一些简单的最佳实践,以使我们的C#代码库更可测试。(有些观点涉及C#模拟框架Rhino Mocks的局限性,但这些规则也可能更普遍地适用。)是否有人遵循任何最佳实践? 为了最大化代码的可测试性,请遵循以下规则: 首先编写测试,然后编写代码。原因:这样可确保您编写可测试的代码,并确保每一行代码都可以为其编写测试。 使用依赖注入设计类。原因:您不能嘲笑或测试看不见的东西。 使用Model-View-Controller或Model-View-Presenter将UI代码与其行为分开。原因:允许在最小化无法测试的部分(UI)的同时测试业务逻辑。 不要编写静态方法或类。 原因:静态方法很难或不可能隔离,Rhino Mocks无法模拟它们。 编程关闭接口,而不是类。原因:使用接口可以阐明对象之间的关系。接口应定义对象从其环境中需要的服务。同样,可以使用Rhino Mocks和其他模拟框架轻松模拟接口。 隔离外部依赖项。原因:无法测试未解决的外部依赖关系。 将要模拟的方法标记为虚拟。原因:Rhino Mocks无法模拟非虚拟方法。

7
如何正确使用存储库模式?
我想知道应该如何对存储库进行分组?就像在asp.net mvc上看到的示例一样,在我的书中,它们基本上每个数据库表都使用一个存储库。但这似乎是很多存储库,导致您以后不得不调用许多存储库以进行模拟和填充。 所以我想我应该将它们分组。但是我不确定如何将它们分组。 现在,我做了一个注册资料库来处理我所有的注册资料。但是,有4个表需要更新,而在我拥有3个存储库之前,需要进行更新。 例如,表之一是许可证表。当他们注册时,我查看他们的密钥并检查它是否存在于数据库中。现在,如果我需要检查该许可证密钥或该表中其他位置(而不是注册)的其他内容,该怎么办? 可以登录一个位置(检查密钥是否未过期)。 那么在这种情况下我该怎么办?再次重写代码(打破DRY)?尝试将这两个存储库放在一起,并希望在其他时间点都不需要使用任何方法(例如,也许我可能有一个检查是否使用了userName的方法-也许我会在其他地方使用该方法)。 另外,如果我将它们合并在一起,那么我将需要2个服务层到同一个存储库,因为我认为拥有站点2个不同部分的所有逻辑将很长,而且我必须具有ValidateLogin(),ValdiateRegistrationForm()之类的名称。 ,ValdiateLoginRetrievePassword()等。 还是仍然调用存储库,只是在周围有一个奇怪的名字? 似乎很难建立一个具有足够通用名称的存储库,以便您可以将其用于应用程序的许多位置并且仍然有意义,我认为在存储库中调用另一个存储库不是一个好习惯吗?

15
无法序列化Web API中的响应
我正在使用ASP.NET MVC Web API,但遇到此错误: “ ObjectContent`1”类型未能序列化内容类型“ application / xml”的响应主体;charset = utf-8'。 我的控制器是: public Employee GetEmployees() { Employee employees = db.Employees.First(); return employees; } 为什么我收到此错误?

5
是否可以在XP上运行.NET 4.5应用程序?
首先,我阅读以下内容: 连接盒 VS案 特别是这个频道9的帖子 因此,从最后一个项目符号开始,我真的认为没有办法解决此问题,但是我必须看看我是否能够获得明确的答案,因为我的团队希望从.NET 4.0升级到.NET 4.5。但是,我们必须支持XP。 如果我们要支持XP,是否不可能使用.NET 4.5? 我唯一想到的就是创建两个单独的解决方案,但是如果我们使用.NET 4.5功能,则代码库将不得不有所不同。 因此,我正在寻找一些我可能找不到并且其他人可能已经知道的惊人解决方法。

5
计算两次之间有多少分钟
我的应用程序中有一个datagridview,它包含开始时间和结束时间。我想计算两次之间的分钟数。到目前为止,我已经: var varFinish = tsTable.Rows[intCellRow]["Finish Time"]; TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; int intMinutes = TimeSpan.FromMinutes(varTime); 但是最后一行不会编译,因为它说我为Timespan构造函数使用了无效的参数。我已经对如何计算两次之间的分钟数进行了相当多的研究,但是我遇到了一些麻烦。有人可以建议我实现目标的最佳方法吗? 编辑/ 现在我的代码如下: var varFinish = tsTable.Rows[intCellRow]["Finish Time"]; TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; int intMinutes = (int)varTime.TotalMinutes; 但是我在第二行得到了一个无效的演员表。varFinish和varValue都是时间,例如10:00和8:00。那么不确定为什么他们不强制转换为DateTime吗?
86 c# 

7
foreach循环如何在C#中工作?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4个月前关闭。 改善这个问题 哪些类型的类可以使用foreach循环?
86 c#  foreach 

4
linq的let关键字是否比它的into关键字好?
我目前正在重新学习LINQ,并试图理解let和使用into关键字之间的区别。到目前为止,就我的理解而言,该let关键字似乎比该into关键字更好。 该into关键字基本上可以让一个投影后继续查询。(只想明确指出,我不是在指代组联接。) 给定一组名称,它允许执行以下操作: var intoQuery = from n in names select Regex.Replace(n, "[aeiou]", "") into noVowel where noVowel.Length > 2 select noVowel; 它需要选择的结果,并将其放置到noVowel变量,然后允许一个引入额外的where,orderby和select条款。一旦noVowel变量被创建,该n变量不再可用。 该let关键字,而另一方面,使用温度匿名类型,让你在同一时间重复使用一个以上的变量。 您可以执行以下操作: var letQuery = from n in names let noVowel = Regex.Replace(n, "[aeiou]", "") where noVowel.Length > 2 select noVowel; 无论是noVowel和n变量都可以使用(尽管我没有在这种情况下使用它)。 虽然我可以看到区别,但是我不能完全理解为什么要使用该into关键字而不是该let关键字,除非有人明确希望确保先前的变量不能在查询的后半部分使用。 那么,这两个关键字同时存在有充分的理由吗?
86 c#  linq 




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.