public static Dictionary<string, Func<XtraReport>> Reports = new Dictionary<string, Func<XtraReport>>() { ["TestReport"] = () => new TestReport() };不要用lamda写
时间: 2024-03-19 11:46:00 浏览: 12
这段代码是定义了一个静态的字典类型的变量Reports,该字典的键是字符串类型,值是一个返回XtraReport类型的委托。同时,该字典中已经添加了一个键为"TestReport",值为一个返回TestReport类型的委托。
下面是不用lambda表达式的代码实现:
```
public static Dictionary<string, Func<XtraReport>> Reports = new Dictionary<string, Func<XtraReport>>();
static MyClass()
{
Reports["TestReport"] = CreateTestReport;
}
private static XtraReport CreateTestReport()
{
return new TestReport();
}
```
相关问题
C# Expressionable<Func<T, bool>> 封装成公共方法
你可以采用以下的方式将 C# Expressionable<Func<T, bool>> 封装成公共方法:
```csharp
public static class ExpressionableExtensions
{
public static Expression<Func<T, bool>> ToExpression<T>(this Expressionable<Func<T, bool>> expressionable)
{
var expression = expressionable.ToExpression();
return expressionable.ToLambda(expression);
}
}
```
这个方法将 Expressionable 对象转换为 Expression<Func<T, bool>> 对象,使其更易于使用。通过这个方法,你可以将 Expressionable 对象转换为可以使用的表达式,例如:
```csharp
var predicate = Expressionable.Create<Person>(p => p.Age > 18 && p.Gender == Gender.Male).ToExpression();
var people = dbContext.People.Where(predicate);
```
Expression<Func<T, bool>>.or
在C#中,可以使用`Expression<Func<T, bool>>`来表示一个lambda表达式,其中`T`是要操作的类型。如果要将两个lambda表达式合并为一个逻辑或条件,可以使用`Expression.Or`方法。
例如,考虑以下两个lambda表达式:
```
Expression<Func<int, bool>> expr1 = x => x > 5;
Expression<Func<int, bool>> expr2 = x => x < 10;
```
要将它们合并为一个逻辑或条件,可以使用以下代码:
```
var orExpr = Expression.Or(expr1.Body, expr2.Body);
var lambda = Expression.Lambda<Func<int, bool>>(orExpr, expr1.Parameters);
```
这将创建一个新的lambda表达式,它表示一个逻辑或条件,即`x > 5 || x < 10`。注意,我们需要使用`Expression.Lambda`方法将结果转换回`Expression<Func<int, bool>>`类型。