我有一个非常不必要的困境。 我懒洋洋地寻找一个将lamda表达式转换为字符串的函数。 令我困扰的是,我每次都在输入这个缓存键,但我真的不想花时间创建它。 我想用它来创建我创建的缓存函数: 如果我想在没有每次调用函数的情况下为某个人获取名称的话。 public static string GetPersonName(int id) { return Repository.PersonProvider.Cached(x => x.GetById(id)).Name; } GetExpressionDescription将返回“PersonProvider.GetById(int 10)” 我认为这是可能的,但我想知道是否有人已经建立了这个或已经在某处看到它。 public static R Cached(this T obj, Expression<Func> function, double hours = 24) { var expressionDescription = GetExpressionDescription(function); return Cached(function, expressionDescription, hours); } public static R Cached(this T obj, Expression<Func> function, string cacheName, double hours = 24) […]
我正在尝试使用Rhino Mocks来模拟下面的lambda,但是不断碰到一堵砖墙 var result = rep.Find(x => (x as IEntity).ID == (entity as IEntity).ID).FirstOrDefault(); 有任何想法吗?
我有一个ASP.NET MVC3应用程序。 我想要一个自定义工具栏,我希望在每个表单中显示。 这个自定义工具栏可以有一个或多个动作链接。所以,我需要开发一个自定义Html帮助器,我可以使用如下; @Html.CustomToolBar(items => { items.Add(“Action”,”Controller”,”Name”,”Text”); items.Add(“Action1″,”Controller1″,”Name1″,”Text1”);}) 这个自定义扩展将生成链接html,我将在我的表单上显示它。 我有一个ToolBarAction类,我想从@Html.CustomToolBar获取List 。 public class ToolbarAction { public string Name { get; set; } public string Action { get; set; } public string Controller { get; set; } public string Text { get; set; } } 你能告诉我如何实现这个目标吗? 如果你能指出适当的资源,那真的很棒.. 非常感谢 问候..
我想建立一个等于预期的表达式…… Expression<Func> expected = (ReferencedEntity referencedEntity) => foreignKeys.Contains(referencedEntity.Id); Expression<Func> actual; foreignKeys类型是List 这是我到目前为止,我认为它将使用Expression.Call()方法,但不确定如何去做。 ParameterExpression entityParameter = Expression.Parameter(typeof(TReferencedEntity), “referencedEntity”); MemberExpression memberExpression = Expression.Property(entityParameter, “Id”); Expression convertExpression = Expression.Convert(memberExpression, typeof(object)); //This is becuase the memberExpression for Id returns a int. //Expression containsExpression = Expression.Call(???? //actual = Expression.Lambda<Func>(????, entityParameter); 谢谢你的帮助。
我有一个服务,它接受一个对象,并根据其中的属性将执行不同的操作; 使用此任何这些属性都可以为null,这意味着不执行此操作。 我正在尝试创建一个非常简单的API,以便在某些属性可以是多个级别的情况下执行此操作,这是当前实现的示例 service.PerformActions(DataFactory.GetNewData ( data => data.SomeParent = DataFactory.GetNewData(), data => data.SomeParent.SomeProperty = “someValue” )); 这是一个略微简化的版本,在实际情况下,我有时必须以这种方式设置多个父属性,以便在底部设置一个字符串属性。 我想要做的是调整GetNewData方法中的代码来处理根据需要实例化这些属性,以便代码看起来像这样: service.PerformActions(DataFactory.GetNewData ( data => data.SomeParent.SomeProperty = “someValue” )); 这是我目前的GetNewData代码: public static T GetNewData(params Action[] actions) { var data = Activator.CreateInstance(); foreach (var action in actions) { try { action(data); } catch (NullReferenceException) { throw new Exception(“The property […]
我想做这个: MethodInfo m = myList.GetType().GetMethod(“ConvertAll”, System.Reflection.BindingFlags.InvokeMethod).MakeGenericMethod(typeof(object)); List myConvertedList = (List)m.Invoke(myList, new object[]{ (t => (object)t)}); myList是特定类型的通用列表(应用程序未知),我想将其转换为对象列表以执行某些操作。 但是这会失败,并显示以下错误:“无法将lambda表达式转换为’object’类型,因为它不是委托类型” 你能帮我找到什么问题吗? 我想做一些不可能的事吗? 有没有其他方法来实现同样的事情?
从C#6开始,lambdas现在默认为实例方法,并且永远不会是静态的(我假设它们现在总是捕获它们,我认为它更有效[考虑到讨论似乎更快])。 请参阅此处: 为什么没有捕获的lambda从C#5中的静态更改为C#6中的实例方法? 在这里: CSC和Roslyn编译器的静态lambda表达式评估的差异? 现在,在创建静态MethodInfos以调用表达式方法(如Expression.Convert(Expression, typeof({SomeType}), conversionMethodInfo);会导致使用lambdas Expression.Convert(Expression, typeof({SomeType}), conversionMethodInfo); 那么,这样做的新方法是什么? 我尝试将“静态”修饰符与lambdas一起使用,但它不起作用。 对于那些无法想象这样的代码的人来说,这可能是一个例子: Func converter = static v => ConvertT1ToT2(v); // (‘T’ is whatever type you want) Expression.Convert(expression, typeof({SomeType}), converter.Method) // (error: converter.Method.IsStatic is false) 是的,显然它不起作用。
我的Xml文件: 1f323c97-2015-4a3d-9956-a93115c272ea Aria Stark 1999-01-01T00:00:00 c9c326c2-1e27-440b-9b25-c79b1d9c80ed John Snow 1983-01-01T00:00:00 我的尝试: XElement toEdit = (XElement)doc.Descendants(“ArrayOfCustomer”) .Descendants(“Customer”) .Where(x => Guid.Parse((x.Descendants(“CustomerId”) as XElement).Value) == customer.CustomerId) .First(); 这会引发以下exception: Object reference not set to an instance of an object. 1)不是x是XElement吗? 2)这是一个适合选择Xml节点的lambda吗? 3)当然,您如何根据CustomerId找到此节点?
我在Visual Web Developer 2010 Express的.Net 4目标项目中使用NuGet的最新版NHibernate(3.3.1.4000)。 当我尝试按照我看到的用于定义别名的示例时,在使用lambdas设置它们时会出现exception(参见屏幕截图)。 正如您所看到的,我收到错误Cannot convert lambda expression to type ‘string’ because it is not a delegate type 。 我在代码顶部引用了LINQ命名空间: using System.Linq; using System.Linq.Expressions; 有什么可能导致问题的想法?
我的表达不是很好,我想改进它们所以我想知道是否有人可以解释我是否有可能在类中创建一个属性,可以在实例化期间给出一个值,如下所示: new Column{ ColumnProperty = p => p.Title}; 或者更好(但我认为我在推动它) new Column {ColumnProperty = p => p.Title}; 有这样的类: public class Column { public Expression<Func> ColumnProperty { get; set; } } 它背后的基本思想是我从一堆像这样的Column对象创建一个Grid。 List productList = GetProductsFromDb(); List columnList = new List(); columnList.Add(new Column {ColumnProperty = p => p.ProductId, Heading = “Product Id”}); columnList.Add(new Column {ColumnProperty = p […]