在C#中,在算法中使用递归函数是一种好习惯吗?

在许多使用递归的函数语言中被认为是一种很好的实践。 我认为这很好,因为编译器优化了函数式语言的代码。 但是在创建算法时,在C#中使用递归是一种好习惯吗? 就C#而言,是否正确,递归算法将导致您的堆栈增长非常显着(如果调用量非常大)并且这根本不会快,并且可能导致堆栈溢出。 或者还有一些优化可以使递归函数高效? 如果您在使用函数语言中的递归和C#的算法之间进行一些比较(速度,内存,可读性),我将不胜感激。

MVC 5.0 和新的IAuthenticationFilter

当我创建一个新的asp.net mvc 4.0应用程序时, 我做的第一件事就是创建并设置一个自定义授权global filter如下所示: //FilterConfig.cs public static void RegisterGlobalFilters(GlobalFilterCollection filters) { //filters.Add(new HandleErrorAttribute()); filters.Add(new CustomAuthorizationAttribute()); } 然后我像这样创建CustomAuthorizationAttribute : //CustomAuthorizationAttribute.cs protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { if (filterContext.HttpContext.Request.IsAjaxRequest()) { //Handle AJAX requests filterContext.HttpContext.Response.StatusCode = 403; filterContext.Result = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } else { //Handle regular requests base.HandleUnauthorizedRequest(filterContext); //let FormsAuthentication make the […]

单击按钮禁用回发

我想在点击后禁用回发。 我试图通过分配onclick=”return false”来做到这一点,但在按钮中不起作用。 我怎样才能解决这个问题?

如何显示与文件类型关联的所有程序的列表?

我正在寻找构建一个打开列表,就像在窗口上下文菜单中,为图像文件。所以我怎么能得到与文件类型相关的所有程序的列表?

C#线程中的只读字段是否安全?

C#线程中的只读字段是否安全? public class Foo { private readonly int _someField; public Foo() { _someField = 0; } public Foo(int someField) { _someField = someField; } public void SomeMethod() { doSomething(_someField); } } 经历了一些post: – 在C#中将字段标记为只读有什么好处? – JaredPar认为,曾经构建的只读字段是不可变的,因此是安全的。 – Readonly Fields和Thread Safety ,表明如果构造函数做了很多工作,那么存在一些风险。 因此,如果在上面的代码中使用readonly字段,并且构造函数很轻,那么它是否是线程安全的? 如果someField是ref类型(例如字符串数组)怎么办?

平面数据的层次结构

我有一个employee类,它有employeeId(int),parent(int)和children属性List 。 我以正确的顺序从数据库中获取员工列表,现在需要构建层次结构 ,但我失败了……我知道这是编程101,但我很难用它。 public class Employee { public int EmployeeId { get; set;} public int ParentId;{ get; set;} public List Children; { get; set;} } 数据示例 EmployeeId, ManagerId 1, 0 //no one 2, 1 3, 1 4, 2 5, 2 6, 3 7, 3

升级到.NET 4.7后,“未定义或导入预定义类型System.ValueTuple”

我正在将现有的解决方案从.NET 4.6.2升级到.NET 4.7。 此解决方案依赖于几个针对.NET 4.6.2的nuget包,因此依赖于nuget System.ValueTuple包。 但升级后,我收到了大量这些构建错误: Error CS8179 Predefined type ‘System.ValueTuple`2’ is not defined or imported 我无法删除System.ValueTuple包,如此处的注释所示,因为其他包依赖于它。 (如果我强迫它,它们似乎会爆炸。) 有什么建议? 更新8/8/17 我已经发现我可以删除System.ValueTuple包,我可以得到解决方案来编译。 但是,我在解决方案中有十几个NuGet包似乎是针对.NET 4.6.2,因此需要System.ValueTuple作为依赖。 我可以安装那些,然后强制删除System.ValueTuple包,但如果任何这些包有更新,我安装更新 – 然后再次安装System.ValueTuple包,系统停止构建,直到我删除重新打包。 换句话说,我可以使一切工作 – 但它似乎很尴尬和kludgy。 当然有更好的方法来解决这个问题吗?

如何构建一个任务而不启动它?

我想使用这个Task 构造函数 。 我似乎无法得到正确的sntax可以有人纠正我的代码。 另外,我是否正确地认为如果以这种方式构建任务,它是不是已经开始了? 我认为我需要的构造函数: Task(Func, Object) 我的代码错误: 参数1:无法从’方法组’转换为’ System.Func ‘ static void Main(string[] args) { var t = new Task(GetIntAsync, “3”); //error is on this line … } static async Task GetIntAsync(string callerThreadId) { … return someInt; }

在ASP.NET MVC 4 C#Code First中指定ON DELETE NO ACTION

如何在模型设计中指定ON DELETE NO ACTION外键约束? 目前,我有: public class Status { [Required] public int StatusId { get; set; } [Required] [DisplayName(“Status”)] public string Name { get; set; } } public class Restuarant { public int RestaurantId { get; set; } [Required] public string Name { get; set; } [Required] [EmailAddress] public string Email { get; set; } […]

在Windows Phone中的SQL Server CE中具有超过4000个字符的NTEXT

在Windows Phone中的SQL Server CE中具有超过4000个字符的NTEXT 我的Windows Phone应用程序中有一个数据库,其中一个表中有一个ntext字段,我正在尝试将一些内容写入此字段,但是我收到一条带有消息的InvalidOperationException : 字符串截断:max = 4000,len = 4621 我正在尝试使用ntext因为我知道nvarchar不接受超过4000个字符。 我已经搜索了一个解决方案,但我找不到任何解决方案。 我找到的唯一解决方案是我无法在Windows Phone上使用,因为它使用SqlConnection和SqlCommand与SqlDbType 。 以下是声明列的方式: private string _content; [Column(DbType=”ntext”)] public string Content { get { return _content; } set { if (value != _content) { _content = value; NotifyChange(o => o.Content); } } } 我插入它: cn.Articles.InsertAllOnSubmit(articlesToSave); cn.SubmitChanges(); 有谁知道任何解决方法? 谢谢你的答案!