Tag: 代码重用

有没有办法捕获lambda表达式,以便它不是编译时强制将身份作为表达式或委托类型?

假设我有一个复杂的lambda表达式,如下所示: x => xAHasValue || (xBHasValue && xC == q) || (!xCHasValue && !xAHasValue) || //…expression goes on 我想将它用作Expression<Func in(例如Linq-To-Entities) Queryable.Where方法。 我也想在Enumerable.Where方法中使用它,但Where方法只接受Func ,而不是Expression<Func 。 lambda语法本身可用于生成Expression<Func>或Func (或任何委托类型),但在此上下文中,它不能一次生成多个。 例如,我可以写: public Expression<Func> PairMatchesExpression() { return x => xA == xB; } 就像我写的那样容易: public Func PairMatchesDelegate() { return x => xA == xB; } 问题是我无法以两种方式使用相同的lambda表达式(即x => xA == xB),而无需将其物理地复制到具有两种不同返回类型的两个单独方法中,尽管编译器能够将其编译为任意一个。 […]

在GET / POST上为ViewModel填充SelectList的最佳方法

我有以下ViewModel: public class EditViewModel { public int FooType { get; set; } public IEnumerable FooTypes { get; set; } } 我最初在我的编辑操作中填充它,如下所示: public ActionResult Edit(int id) { EditViewModel model = new EditViewModel(); model.FooTypes = new SelectList(repository.GetFooTypes(), “Id”, “Value”); return View(model); } 当我创建POST的操作时,我必须重复相同的代码: public ActionResult Edit(int id, EditViewModel model) { if( !ModelState.IsValid ) { model.FooTypes = new […]

有没有办法重用数据注释?

有没有办法在ASP.Net MVC 4中的视图中用作模型的类内部实现数据域(在属性级别)的概念? 考虑以下代码: public class LoginProfileModel { [DisplayName(“Login ID”)] [Required(ErrorMessage = “Login ID is required.”)] public string LogonID { get; set; } [DisplayName(“Password”)] [Required(ErrorMessage = “Password cannot be blank.”)] [StringLength(20, MinimumLength = 3)] [DataType(DataType.Password)] public string Password { get; set; } } 这是ASP.Net MVC 4中的LoginProfileModel。它使用各种元数据/数据注释,以便我可以使用以下代码创建一个干净的视图: @model myWebSite.Areas.People.Models.LoginProfileModel @using ( Html.BeginForm( “Index” , “Login” ) […]

如何避免重复代码?

我还是很喜欢编程,我注意到我正在重复代码: protected void FillTradeSetups() { DBUtil DB = new DBUtil(); DataTable dtTradeSetups; dtTradeSetups = DB.GetTradeSetups(); ddlSetups.DataValueField = “tradeSetupId”; ddlSetups.DataSource = dtTradeSetups; ddlSetups.DataBind(); } protected void FillTimeFrames() { DBUtil DB = new DBUtil(); DataTable dtTimeFrames; dtTimeFrames = DB.GetTimeFrames(); ddlTimeFrames.DataValueField = “tfCode”; ddlTimeFrames.DataSource = dtTimeFrames; ddlTimeFrames.DataBind(); } protected void FillTradeGrades() { DBUtil DB = new DBUtil(); DataTable […]

如何组织大型代码文件?

我越来越意识到我的代码在任何单个文件中都可以很容易地跨越数百行,虽然我知道实现可能是合理的,但它仍然感觉凌乱和无组织。 我知道有些情况下需要很多代码,但最好的方法是组织它们吗? 我已经考虑过将变量与方法, private s从public和internals分开,但我不想这样,因为我不禁想到ONE类的组件属于一个文件。 当我使用WPF窗口的代码隐藏时,整个事情变得更加复杂,这个窗口似乎总是以指数速率迅速成长为一个巨大的混乱。 另外:C#有一个名为partial的关键字,它允许您在不影响function的情况下将类拆分为任意数量的文件。 但是,我注意到Microsoft似乎只使用partial来隐藏生成的代码(Winforms / WPF。)这让我质疑是否因为它有多行来分割一个类是合法使用的partial – 是吗? 谢谢

如何创建和维护代码重用库?

我正在尝试设置可重用代码的存储库。 我在考虑让每个可重用的代码模块都有一定的“成熟度等级”。 评级将被定义为可重用代码位于特定要求集内的级别。 最高成熟度级别将是预定义要求集中的最高标准度。 例如: 水平; 要求; 描述 0级; 代码合法使用; 该代码在商业行业/多个合同/等中是否合法? 1级; 基本代码行并满足0级要求; 原型代码,第三方工具等 2级; 具有function界面和注释,符合1级要求; 每个类和函数的足够文档; 能够从评论中确定function 3级; 遵守编码标准,符合2级要求; 遵循定义的编码标准并通过代码检查实用程序测试 4级; 包括测试用例并满足3级要求; 有足够的测试用例来测试代码的所有function 5级; 经再利用委员会批准,符合4级要求; 由重用专家和同行审核并validation其符合所有成熟度级别 我想知道这个成熟度级别是否应该是一个层次结构,为了进入下一个级别,你需要满足所有以前级别的要求(如上所示)? 或者它是否应该是满足下一级别的要求的子集? 例如,我们满足x个y要求,我们可以进入下一个级别(要求与上面提到的相同)。 0级,满足6个要求中的0个 1级,满足6个要求中的1个 … 我在子集方法中看到的问题是某些要求应该具有更强的权重,并且在这种方法中不会被考虑(除非我开始具体化,满足b和x中的y等)。 但随后它可能会变得复杂起来。 有没有人以前做过这个,如果有的话,你是如何设置你的图书馆的? 您是否拥有所有或其他结构的成熟度? 任何投入将不胜感激。

从多个项目中引用C#代码

我有一个.cs文件,里面装满了C#代码,我一直在多个项目中重复使用。 现在我将它包含在这些项目中,方法是将代码复制并粘贴到每个项目目录中的新文件中。 这是错误的做法。 什么是正确的方法呢? 正确的方法应该: 将公共代码仅保存在计算机上的一个位置 并保持链接新鲜 – 所以当公共代码更改时,每个项目都知道它,下次我重新编译该项目。 随机猜测,我希望某种指令如using mycode = C:\common\mycode.cs ,但我确信这不是.NET的做事方式。 (我正在使用C#2010,.NET 4.0,并且只在一台计算机上本地编译此代码。)

C#可重用函数转储局部变量的当前值

我想编写一个可重用的函数,我可以在任何方法中调用它来记录所有局部变量的快照。 例如: void somemethod() { int a = 1; string s = “something”; dumpLocalVariables(“step 1”, MethodInfo.GetCurrentMethod(), this); a++; string t = s + “else”; dumpLocalVariables(“step 2”, MethodInfo.GetCurrentMethod(), this); } 我想获得这样的控制台输出: step 1 Int32 a = 1 String s = something step 2 Int32 a = 2 String s = something String t = somethingelse 我想避免提供一个特定的局部变量名列表。 […]