Tag: .net

使用扩展方法定义的查询进行unit testing

在我的项目中,我使用以下方法从数据库中查询数据: 使用可返回任何类型且不绑定到一种类型的通用存储库,即IRepository.Get而不是IRepository.Get 。 NHibernates ISession就是这样一个存储库的一个例子。 使用具有特定T IQueryable上的扩展方法来封装重复查询,例如 public static IQueryable ByInvoiceType(this IQueryable q, InvoiceType invoiceType) { return q.Where(x => x.InvoiceType == invoiceType); } 用法如下: var result = session.Query().ByInvoiceType(InvoiceType.NormalInvoice); 现在假设我有一个我要测试的公共方法使用此查询。 我想测试三种可能的情况: 查询返回0个发票 查询返回1张发票 查询返回多个发票 我现在的问题是:要嘲笑什么? 我不能模拟ByInvoiceType因为它是一个扩展方法,或者我可以吗? 我出于同样的原因甚至无法模拟Query 。

List .AddRange实现次优

分析我的C#应用​​程序表明在List.AddRange花费了大量时间。 使用Reflector查看此方法中的代码表明它调用了List.InsertRange ,它实现如下: public void InsertRange(int index, IEnumerable collection) { if (collection == null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.collection); } if (index > this._size) { ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.index, ExceptionResource.ArgumentOutOfRange_Index); } ICollection is2 = collection as ICollection; if (is2 != null) { int count = is2.Count; if (count > 0) { this.EnsureCapacity(this._size + count); if (index < this._size) { Array.Copy(this._items, index, […]

手动编写解析器的最佳方法是什么?

我们使用ANTLR为类似SQL的语法创建解析器,虽然在大多数情况下结果令人满意,但我们需要修复一些边缘情况; 因为我们自己没有编写解析器,所以我们并不能很好地理解它,以便能够做出明智的改变。 所以,我们想编写自己的解析器。 手动编写解析器的最佳方法是什么? 我们应该使用什么样的解析器 – 建议使用递归下降; 是对的吗? 我们将用C#编写它,因此任何用该语言编写解析器的教程都会感激不尽。 更新:我也对涉及F#的答案感兴趣 – 我一直在寻找在项目中使用它的理由。

如何将文件存储在数据库中?

如何将用户上传的文件存储到数据库中? 我想将文件存储在数据库中,我们该怎么做? 在后端我使用sql与c#.net应用程序。

用于文本算法的.NET库?

你知道任何用于文本算法的.NET库吗? 特别是我对字符串匹配和全文搜索算法感兴趣 Bitap算法 Levenshtein距离 Damerau-Levenshtein距离 我知道我提到的那个代码非常简单,但有数百种文本算法,我不想自己编写代码。 如果没有已知的这样的.NET库,你可以提一下C,C ++库,编码包装器比零编码更容易。

无法将类型’string’隐式转换为’int’

我一直得到调试错误“不能在C#中隐式地将类型’字符串’转换为’int’”。 这是我的代码片段: private void button2_Click(object sender, EventArgs e) //button to start takedown { byte[] packetData = System.Text.ASCIIEncoding.ASCII.GetBytes(“”); string IP = “127.0.0.1”; int port = “80”; IPEndPoint ep = new IPEndPoint(IPAddress.Parse(IP), port); Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); client.SendTo(packetData, ep); }

如何引用具有数百万个节点的树中的子节点

我正在尝试构建一个树,其中每个节点可以有一个未指定数量的子节点。 该树在实践中将拥有超过一百万个节点。 我已经设法构建了树,但是当我用几千个节点填充树时,由于完整堆,我遇到了内存错误。 这是因为我试图将每个节点的子节点存储在Dictionary数据结构(或任何数据结构)中。 因此,在运行时我已经创建了数千个这样的数据结构,因为每个节点可以具有未指定数量的子节点,并且每个节点的子节点将存储在该数据结构中。 还有另一种方法吗? 我不能简单地使用变量来存储子节点的引用,因为每个节点可能有一个未指定数量的子节点。 那么,它不像二叉树,我可以有2个变量分别跟踪左孩子和右孩子。 请不要另外建议这样做的方法。 我有理由需要创建这个树,不幸的是我不能这样做。 谢谢!

帮助我使用CrossThread?

此代码以多种方式执行。 当它由表单按钮执行时它工作(按钮启动一个线程,在循环中它调用这个方法=它的工作原理)。 但是当我从表单中的BackgroundWorker调用该方法时,它不起作用。 使用以下代码: private void resizeThreadSafe(int width, int height) { if (this.form.InvokeRequired) { this.form.Invoke(new DelegateSize(resizeThreadSafe), new object[] { width, height }); } this.form.Size = new Size(width, height); // problem occurs on this line this.form.Location = new Point(0, 0); // dummy coordinate } 然后在包含this.form.Size = …的行上我得到以下exception: InvalidOperationException was unhandled Cross-thread operation not valid: Control ‘Form1’ […]

使用正则表达式检测文本中的电子邮件

我希望以文本格式检测电子邮件,以便我可以在锚点上使用mailto标记在其上放置锚标记。 我有它的正则表达式,但代码还检测已经由锚标记封装或在锚标记mailto参数内的电子邮件。 我的正则表达式是: ([\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[az]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?) 但它在以下示例文本中检测到3个匹配项: ttt someemail@mail.com abc email@email.com 我希望只有email@email.com才能与正则表达式匹配。

没有ASP.NET标识的OWIN cookie身份validation

我是ASP.NET MVC 5的新手,我发现身份认证+授权框架非常不舒服。 我知道这是ASP.NET MVC框架的一个新function,所以我想在我的应用程序中应用另一种方法来实现身份validation。 可能吗? 我读过我可以使用FormsAuthenticationModule 。 这是一个很好的选择吗? 如何在基于MVC 5的应用程序中使用它?