为委托分配本地function

在C#7.0中,您可以声明本地函数,即生活在另一个方法中的函数。 这些本地函数可以访问周围方法的局部变量。 由于局部变量仅在调用方法时存在,我想知道是否可以将一个局部函数分配给一个委托(它可以比这个方法调用寿命更长)。 public static Func AssignLocalFunctionToDelegate() { int factor; // Local function int Triple(int x) => factor * x; factor = 3; return Triple; } public static void CallTriple() { var func = AssignLocalFunctionToDelegate(); int result = func(10); Console.WriteLine(result); // ==> 30 } 它确实有效! 我的问题是:为什么这有效? 这里发生了什么?

表单和设计器文件未在解决方案资源管理器

我似乎无法将表单和设计器文件链接到我的项目中。 它们在Solution Explorer中看起来像这样。 我已从项目中排除了文件,然后尝试将它们包含在项目中,但这不起作用。 下面是设计器代码和表单代码的片段,以防有什么内容。 public partial class FormPrompt { private Button ButtonOk; private Container Components; private Label LabelPleaseEnter; private Label LabelPrompt; private TextBox TextBoxData; private void InitializeComponent() { this.LabelPleaseEnter = new Label(); this.LabelPrompt = new Label(); this.TextBoxData = new TextBox(); this.ButtonOk = new Button(); this.LabelPleaseEnter.Location = new Point(8, 0x58); this.LabelPleaseEnter.Size = new Size(0x48, 0x10); […]

什么是VB.NET相当于C#的’使用’块

我在VB.NET编码。 目前,我在Try / Catch块中包含对象初始化和使用,然后在Finally块中将其拆除(dispose,close,设置为nothing)。 问题是,C#’using’块很容易使用,并且会在我的代码中清理它们。 是否有VB.NET等价物? 或者是我的Finally块拆解解决方案唯一的方法?

如何在c#中按两列对DataTable进行排序

我有一个如下所示的DataTable ; | ID | ItemIndex | ItemValue ce895bd9-9a92-44bd-8d79-986f991154a9 1 3 ae7d714e-a457-41a8-8bb4-b5a0471c3d2f 2 2 a774dff3-acc0-4f50-a211-a775e28dcae3 2 1 292bbd50-290b-4511-9e4e-2e74e3ebe273 3 2 ae7d714e-a457-41a8-8bb3-b5a0471c3d22 3 1 我想先通过ItemIndex对这个表进行排序,然后按ItemValue对排序后的表进行排序。 我怎样才能做到这一点? 编辑:排序后,我想要我的表如下; | ID | ItemIndex | ItemValue ce895bd9-9a92-44bd-8d79-986f991154a9 1 3 a774dff3-acc0-4f50-a211-a775e28dcae3 2 1 ae7d714e-a457-41a8-8bb4-b5a0471c3d2f 2 2 ae7d714e-a457-41a8-8bb3-b5a0471c3d22 3 1 292bbd50-290b-4511-9e4e-2e74e3ebe273 3 2

向DataContract添加名称和命名空间有什么作用?

我尝试调用一个名为Register的WebInvoke方法,该方法返回一个User对象并立即返回该对象。 它看起来如下: User Register(User user) { return user; } 我不确定在调用http:// localhost:8081 / user / register时,Name和Namespace属性对DataContract属性的作用是什么? 我问的原因是因为我最初使用DataContract属性装饰了我的类,如下所示: [DataContract] public class User { // Properties } 当我打开Fiddler并发送一个Post请求时,它说方法不允许,但当我将DataContract更改为: [DataContract(Name=”User”, Namespace=””)] 有效。

Contract.Ensures如何运作?

我开始使用代码合同,虽然Contract.Requires非常简单,但我很难看到Ensures实际上做了什么。 我试过创建一个像这样的简单方法: static void Main() { DoSomething(); } private static void DoSomething() { Contract.Ensures(false, “wrong”); Console.WriteLine(“Something”); } 我从来没有看到消息“错误”,也没有抛出exception或其他任何东西。 那它实际上做了什么?

从URI相对路径中删除%20

我正在生成从1个目录到另一个目录的相对路径。 如果OutputDirectoryName属性是包含空格的目录,则使用%20而不是空格对空格进行编码。 我正在创建一个Windows文件夹的相对路径,所以我必须使用空格我的相关路径。 是否有一种干净的方式来指定URI的编码方式? 我知道我可以在relativePath.ToString()上做一个stirng替换,但我想知道是否有更好的实现。 谢谢。 public string GetOutputDirectoryAsRelativePath(string baseDirectory) { Uri baseUri = new Uri(baseDirectory); Uri destinationUri = new Uri(OutputDirectoryName); Uri relativePath = baseUri.MakeRelativeUri(destinationUri); return relativePath.ToString(); }

VS 2010设计器错误’无法在Windows7中找到类型XYZ’。 在XP中运行良好

我在VS 2010 C#.NET中遇到了问题。 我在Windows XP上有一个项目,包括表单,类和一些我自己的自定义组件。 这些组件是内置MS组件的简单扩展(例如DataGridViewEx作为DataGridView的扩展)。 一切都在XP中运行良好。 我正试图在Windows 7 / x64上将此项目移植到VS 2010。 我已经有了在Windows 7上编译OK的解决方案,但是在设计模式下,当我打开包含一个自定义控件的表单时,我收到错误’找不到类型XYZ.DataGridViewEx。 请确保引用包含此类型的程序集。 XYZ是我用于这些控件的命名空间,它与使用控件的表单具有相同的命名空间。 所有这些都是同一个VS项目的一部分。 当我在同一项目中打开一个不包含这些自定义控件之一的表单时,该表单在设计器中打开OK,我在工具箱的左侧看到自定义控件。 但是,如果我尝试将其中一个控件拖到该表单中,它会弹出一个错误消息框’无法加载工具箱项’DataGridViewEx’。 它将从工具箱中删除。 然后它会从工具箱中删除。 在XP中的VS解决方案中,一切都运行良好。 此问题仅发生在Windows 7 / x64中的VS解决方案中。 我不明白为什么它抱怨无法找到该组件,因为该组件是同一项目的一部分。 这是一件有效的事情,不是吗? 我搜索了网络/论坛,发现了“找不到类型”错误的情况,但它似乎是由一个不同的问题引起的,我还没有找到摆脱错误的方法。 任何帮助/提示非常感谢!

为什么HashSet 类不用于实现Enumerable.Distinct

我需要以大O表示法访问IEnumerable.Distinct的渐近时间和空间复杂度 所以我在看扩展方法Enumerable.Distinct的实现,我看到它是使用和内部类Set ,这几乎是一个带有“开放寻址”的哈希表的经典实现 很快引起注意的是Set中的很多代码只是来自HashSet的复制粘贴,有一些遗漏 但是,这个简化的Set实现有一些明显的缺陷,例如Resize方法不使用素数作为槽的大小,比如HashSet ,看看HashHelpers.ExpandPrime 所以,我的问题是: 这里代码重复的原因是什么,为什么不坚持DRY原则? 特别是考虑到这两个类都在同一个程序集System.Core 看起来HashSet会表现得更好,所以我应该避免使用Distinct扩展方法,并编写我自己的扩展方法,使用HashSet而不是Set ?

碰撞检测实施

我有一个碰撞检测类,它通过查找中心之间的距离以及该距离是否足够小而成为碰撞(参见碰撞检测错误 )。 我的问题是试图使这个实际工作,椭圆碰撞。 如有必要,我会解释更多。 谢谢