Tag: lambda

我如何解决这个lambda表达式外部变量问题?

我正在使用PropertyDescriptor和ICustomTypeDescriptor( 仍然 )尝试将WPF DataGrid绑定到一个对象,数据存储在一个Dictionary中。 因为如果你向WPF DataGrid传递一个Dictionary对象列表,它将根据字典的公共属性(Comparer,Count,Keys和Values)自动生成列,我的Person子类为Dictionary,并实现ICustomTypeDescriptor。 ICustomTypeDescriptor定义了一个返回PropertyDescriptorCollection的GetProperties方法。 PropertyDescriptor是抽象的,所以你必须将它子类化,我想我有一个构造函数,它接受Func和一个Action参数,它们委托字典中值的获取和设置。 然后我为字典中的每个Key创建一个PersonPropertyDescriptor,如下所示: foreach (string s in this.Keys) { var descriptor = new PersonPropertyDescriptor( s, new Func(() => { return this[s]; }), new Action(o => { this[s] = o; })); propList.Add(descriptor); } 问题是每个属性得到它自己的Func和Action但它们都共享外部变量s所以尽管DataGrid自动生成“ID”,“FirstName”,“LastName”,“Age”,“Gender”的列,它们都得到了设置为“性别”,这是foreach循环中s的最终静止值。 如何确保每个委托使用所需的字典密钥,即Func / Action实例化时的s值? 非常感谢。 这是我的其余想法,我只是在这里试验这些不是’真正’的类…… // DataGrid binds to a People instance public class People : […]

动态LINQ查询从数据库获取Field值

可能吗? Public String Get_Filed_By_Id(string table_Name,String Field_Name,string PK_val) { string strRes=””; using(mydbcontext db=new mydbcontext()) { var x=db.table_Name.Where(p=>p.Id=PK_val).FirstOrDefault().Field_Name; strRes=Convert.Tostring(x); } return strRes; } 要么 var x=(from o in db.table_Name where o.Id=PK_val select o.Field_Name).FirstOrDefault(); 在这里,我传递Table_Name , Column_Name和Condition值( PK_val )以在特定条件( Id=Pk_val )内从Table_Name获取Column_Name 。 可能吗??

LINQ:按最常见值排序

我正在尝试在c#中创建一个“有序”对象列表,其中列表将按ImdbId属性中最常见的值排序。 我没有使用数据库我从列表中获取远程api的结果,我只需要以优雅的方式对列表进行排序。 class Movie { String ImdbId {get; set; } String Name {get;set;} … more properties } 未排序列表的示例: imdbId | Name 698649 | “Sex and the City” Models and Mortals 698669 | “Sex and the City” The Awful Truth 698649 | “Sex and the City” Models and Mortals 698649 | “Sex and the City” Models […]

分配给事件的lambda会阻止拥有对象的垃圾收集吗?

假设您有一个带有事件属性的类。 如果在本地上下文中实例化此类,而没有外部引用,则会为事件分配lambda表达式,以防止实例被垃圾回收? { var o = new MyClass(); o.MyClassEvent += (args) => {}; } // Will ‘o’ be eligible for garbage collection here?

如何使用LINQ从字符串中删除字符

我有一个类似的字符串 XQ74MNT8244A 我需要删除字符串中的所有char 。 所以输出就像 748244 这该怎么做? 请帮我这样做

Lambda和Expression.Call用于扩展方法

我需要为这样的方法实现一个表达式: var prop = Expression.Property(someItem, “Name”); var value = Expression.Constant(someConstant); var contains = typeof(string).GetMethod(“Contains”, new[] {typeof(string)}); var expression = Expression.Call(prop, contains, value); 但对于我的扩展方法: public static class StringEx { public static bool Like(this string a, string b) { return a.ToLower().Contains(b.ToLower()); } } 不幸的是,下一个代码为参数“method”抛出了ArgumentNullException: var like = typeof(string).GetMethod(“Like”, new[] {typeof(string)}); comparer = Expression.Call(prop, like, value); 我做错了什么?

运算符作为C#中的方法参数

我不认为使用运算符作为C#3.0中方法的参数是可能的,但有没有办法模拟那个或一些语法糖,使它看起来像是在发生什么? 我问,因为我最近在C#中实现了鹅口疮组合,但是在翻译Raganwald的Ruby例子时 (1..100).select(&:odd?).inject(&:+).into { |x| x * x } 其中写着“从1到100取数字,保留奇数,取这些数字的总和,然后回答那个数字的平方。” 我对Symbol#to_proc的东西不满意 。 这是&:在select(&:odd?)和上面的inject(&:+) 。

Lambda转换具有不明确的返回类型和重载决策

如果我有一个lambda,如() => { throw new Exception(); } () => { throw new Exception(); } ,目前还不清楚它是否有返回类型。 因此,它可以(隐式)转换为Action和Func (或任何其他Func )。 这是因为,根据§6.5C#4规范的匿名函数转换 : [A]委托类型D与提供的匿名函数F兼容: … 如果D具有void返回类型且F的主体是语句块,则当F的主体是有效语句块时,其中没有return语句指定表达式。 如果D具有非void返回类型且F的主体是语句块,则当F的主体是具有不可到达端点的有效语句块时,其中每个return语句指定隐式表达式可转换为D的返回类型。 但是如果我有一个方法的两个重载,其中一个具有Action类型的参数而另一个具有Func ,并且我从上面传递lambda,则使用Func重载。 为什么? 规范的哪一部分说在这种情况下Func比Action更好? 我已经看过§7.5.3.2 更好的函数成员 ,但这并没有解释它。

无法将lambda表达式转换为类型“object”,因为它不是委托类型

我有一个具有bool属性的基类,如下所示: public abstract class MyBaseClass { public bool InProgress { get; protected set; } } 我从它inheritance了另一个类,并尝试将InProgress添加为字典的委托。 但它给我一个错误。 这就是我的Derived类的样子: public abstract class MyClass { Dictionary dict = new Dictionary(); dict.Add(“InProgress”, InProgress => base.InProgress = InProgress); } 这是我得到的错误: 无法将lambda表达式转换为类型“object”,因为它不是委托类型 我在这做错了什么?

有没有办法在lambda表达式树中使用`dynamic`?

一,规格。 我们使用MVC5,.NET 4.5.1和Entity框架6.1。 在我们的MVC5业务应用程序中,我们有很多重复的CRUD代码。 我的工作是“自动化”大部分内容,这意味着将其提取到基类并使其可重用。 现在,我有控制器,视图模型和EF6实体模型的基类。 我的抽象基类,所有EF6实体都inheritance: public abstract class BaseEntity where TSubclass : BaseEntity { public abstract Expression<Func> UpdateCriterion(); } UpdateCriterion方法用于数据库上下文的AddOrUpdate方法。 我有一个子类的generics参数,因为UpdateCriterion需要返回使用精确子类类型的lambda表达式,而不是接口或基类。 实现此抽象基类的极其简化的子类如下所示: public class Worker : BaseEntity { public int ID { get; set; } public int Name { get; set; } public override Expression<Func> UpdateCriterion() { return worker => worker.ID; } } […]