标签: func

C#创建函数队列

我写了一个名为QueueManager的类:

class QueueManager
{
    Queue functionsQueue;

    public bool IsEmpty 
    { 
        get 
            {
                if (functionsQueue.Count == 0)
                    return true;
                else
                    return false;
            }
    }

    public QueueManager()
    {
        functionsQueue = new Queue();
    }

    public bool Contains(Action action)
    {
        if (functionsQueue.Contains(action))
            return true;
        else 
            return false;
    }

    public Action Pop()
    {
        return functionsQueue.Dequeue() as Action;
    }

    public void Add(Action function)
    {
        functionsQueue.Enqueue(function);
    }

    public void Add(Func<CacheObject,Boolean> function)
    {
        functionsQueue.Enqueue(function);
    }
Run Code Online (Sandbox Code Playgroud)

当我创建这个类的实例并调用Add方法时,它适用于没有参数的函数,例如:functionQueue.Add(Method); ,但是在调用具有参数和返回值的方法时(在我的情况下,ClassType作为参数,并且Boolean作为返回值),例如functionQueue.Add(Method2(classObject)); 它不编译,我错过了什么?

.net c# queue action func

3
推荐指数
1
解决办法
1万
查看次数

如何创建将表达式作为参数的通用表达式

DisplayNameFor(x=>x.Title)ASP.Net MVC 中有一个助手。我想实现类似的行为。

我想要一个方法,它接受基于User类(u=>u.Birthdate或 u=>u.Name)的表达式、一个操作数(更大、更少、等于)和一个类似的值DateTime.Now并返回一个表达式 u=>u.Birthdate > DateTime.Now

我知道我必须从片段手动构建结果表达式。我无法理解的是传入和处理属性表达式。

编辑:
我想调用一个方法,如
GetFilterPredicate(u=>u.Birthdate,FilterOps.GreaterThan,DateTime.Parse("01.01.2013")
GetFilterPredicate(u=>u.SomeIntProperty,FilterOps.Equals,2)

更新:我已经创建了一个 repo 来解决这个问题以及一个集合属性过滤 https://github.com/Alexander-Taran/Lambda-Magic-Filters

c# lambda func expression-trees

3
推荐指数
1
解决办法
4921
查看次数

用 Func 替换 MongoDB 查询中的 lambda 表达式

我想替换以下代码中的 lambda 表达式

var idQuery = Query<ApiStatisticsAggregatedStats>.EQ(t => t.Api, id);
Run Code Online (Sandbox Code Playgroud)

带有功能。将鼠标悬停在声明上,它说声明是

Func<ApiStatisticsAggregatedStats, string>
Run Code Online (Sandbox Code Playgroud)

但是下面的代码给出了一个错误,

Func<ApiStatisticsAggregatedStats, string> idFunc = x => x.Api
var idQuery = Query<ApiStatisticsAggregatedStats>.EQ(idFunc, id);
Run Code Online (Sandbox Code Playgroud)

错误:

最好的重载方法匹配Query<ApiStatisticsAggregatedStats>.EQ<string>(Expression<Func<ApiStatisticsAggregatedStats, IEnumerable<string>>>, string)有一些无效的参数。

那是IEnumerable从哪里来的?我究竟做错了什么?

c# lambda func mongodb

3
推荐指数
1
解决办法
1211
查看次数

我如何必须传递 MemberInitExpression 对象

当我运行此代码时,我在 Update 方法中遇到异常

public void UpdateTeststep(Teststep step)
        {
            _context.Teststeps.Where(t => t.TeststepId == step.TeststepId).Update(t => step);
            _context.SaveChanges();
        }

{"The update expression must be of type MemberInitExpression.\r\nParametername: updateExpression"}
Run Code Online (Sandbox Code Playgroud)

我的 updateExpression 有什么问题?

这是 Update 方法的源代码:

http://www.symbolsource.org/Public/Metadata/NuGet/Project/EntityFramework.Extended/1.0.0.20/Release/.NETFramework,Version%3Dv4.0/EntityFramework.Extended/EntityFramework.Extended/EntityFramework.Extended/Extensions /BatchExtensions.cs?ImageName=EntityFramework.Extended

第 454 行:

var memberInitExpression = updateExpression.Body as MemberInitExpression;
                if (memberInitExpression == null)
                    throw new ArgumentException("The update expression must be of type MemberInitExpression.", "updateExpression");
Run Code Online (Sandbox Code Playgroud)

为什么我传递的值是空的?我是否以错误的方式通过了我的测试步骤?

c# entity-framework func entity-framework-extended

3
推荐指数
1
解决办法
2414
查看次数

c#延期评估和返回值

考虑到下面的例子,我很困惑为什么第一个例子的结果是4,8,6,第二个例子是4,8,3?对我来说,在第一个例子中,只评估succ(3)和dub(4),y应该是3?有人可以帮忙解释它是如何工作的吗?非常感谢!

例一:

public class Hello {
   public static void Main(string[] args) {
     int y = 0;
     Func<int,bool> even = (n) => { return n%2 == 0; }; 
     Func<int,int> dub = (n) => { y += 2; return n + n; };
     Func<int,int> succ = (n) => { y += 1; return n + 1; };

     Func<bool, int, int, int> if1 = (c, t, f) => c? t: f;

     y = 0;
     var a1 = if1(even(3), dub(3), succ(3));
     var a2 = …
Run Code Online (Sandbox Code Playgroud)

c# if-statement return func deferred

3
推荐指数
1
解决办法
210
查看次数

Swift 中的递归枚举

我正在学习 Swift 2(和 C,但也不会太久)不久,我遇到了在递归枚举方面遇到很多困难的地步。

看来,我需要把indirect在之前enum,如果它是递归的。然后我有第一个Int括号之间的情况,因为稍后在 switch 中它返回一个Integer,是吗?

现在是第二种情况的第一个问题Addition。我必须把它放在ArithmeticExpression括号之间。我试着把Int它放在那里,但它给了我一个错误,必须是一个ArithmeticExpression而不是Int. 我的问题是为什么?我无法想象那是什么。为什么我不能在Int那里放两个?

下一个问题ArithmeticExpression又来了。在func solution它进入一个名为 expression 的值中,它的类型ArithmeticExpression是 ,这是正确的吗?其余的,至少现在,完全清楚。如果有人能以简单的方式向我解释这一点,那就太好了。

这是完整的代码:

indirect enum ArithmeticExpression {
    case Number(Int)
    case Addition(ArithmeticExpression, ArithmeticExpression)
}

func solution(expression: ArithmeticExpression) -> Int {
    switch expression {
    case .Number(let value1):
        return value1;
    case . Addition(let value1, let value2):
        return solution(value1)+solution(value2);
    }
}

var ten = ArithmeticExpression.Number(10);
var …
Run Code Online (Sandbox Code Playgroud)

enums func swift swift2

3
推荐指数
2
解决办法
1781
查看次数

#selector 与闭包不兼容?

我试图用闭包来实现自定义函数。但它不受#selector.

下面是一个例子:

class Core: NSObject {

    static let shared:Core = Core.init()


    func button(viewController: UIViewController, button: UIButton, title: String, color: UIColor, completion: () -> Void) {

        button.layer.cornerRadius = button.bounds.width / 2
        button.setTitle(title, for: .normal)
        button.setTitleColor(UIColor.white, for: .normal)
        button.backgroundColor = color
        button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 18)
        button.addTarget(viewController, action: #selector(completion()), for: .touchUpInside)
    }
}
Run Code Online (Sandbox Code Playgroud)

Xcode 给了我一个构建时间问题:

“#selector”的参数不引用“@objc”方法、属性或初始值设定项

closures func selector swift

3
推荐指数
1
解决办法
1150
查看次数

Func委托中的任务<T>和任务

嘿伙计们,我想清理一些代码.我有重载方法.我可以以某种方式简单地使用这个代码并在另一个方法中调用一个方法吗?无法弄清楚如何做到这一点.

private async Task<T> DecorateWithWaitScreen<T>(Func<Task<T>> action)
{
    SplashScreenManager.ShowForm(this, typeof(WaitForm), true, true, false);
    try
    {
        return await action();

    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
        throw;
    }
    finally
    {
        SplashScreenManager.CloseForm(false);
    }
}

private async Task DecorateWithWaitScreen(Func<Task> action)
{
    SplashScreenManager.ShowForm(this, typeof(WaitForm), true, true, false);
    try
    {
        await action();
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
        throw;
    }
    finally
    {
        SplashScreenManager.CloseForm(false);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# func task-parallel-library

3
推荐指数
1
解决办法
743
查看次数

.net core - 将 func 列表与单个 func 组合或组合到单个 func

您好,我尝试从由 or 组合的列表中生成单个 Func。

var funcs = new List<Func<User, bool>>()
{
    (u) => u.Id.Equals(entityToFind.Id),
    (u) => u.UserName == entityToFind.UserName,
    (u) => u.Email == entityToFind.Email
};

//TODO: Some magic that funs is euqaly to that:

Func<User, bool> func =  (u) => u.Id.Equals(entityToFind.Id) || u.UserName == entityToFind.UserName || u.Email == entityToFind.Email;
Run Code Online (Sandbox Code Playgroud)

我也用表达式尝试过,就像这样:

private Dictionary<string, Expression<Func<User, bool>>>     private Dictionary<string, Expression<Func<User, bool>>> test(User entityToFind)
{
    return new Dictionary<string, Expression<Func<User, bool>>>() {
        {"Id", (u) => u.Id.Equals(entityToFind.Id) },
        {"Name", (u) => u.UserName == entityToFind.UserName },
        {"Email", …
Run Code Online (Sandbox Code Playgroud)

linq generics func .net-core asp.net-core

3
推荐指数
1
解决办法
692
查看次数

如何使用 await 简单安全地调用可为空的委托

func<Task>我的项目中有代表可以为空。有没有办法使这样一个委托的调用更简单,如下所示?

public async Task Test()
{
    Func<Task> funcWithTask = null;

    await (funcWithTask != null ? funcWithTask.Invoke() : Task.CompletedTask);
}
Run Code Online (Sandbox Code Playgroud)

c# func nullreferenceexception task-parallel-library async-await

3
推荐指数
1
解决办法
87
查看次数