C# 返回值为的匿名委托

C# 返回值为的匿名委托,c#,asynchronous,callback,delegates,anonymous,C#,Asynchronous,Callback,Delegates,Anonymous,[事实上,我不确定问题是否与anonymous和delgate有关。] 在我的应用程序中,我使用异步创建新项。在AddNew方法中,它将从repo类调用createanewitem,然后将其添加到list item。create方法有参数,但有返回值 问题是我真的不知道如何用匿名调用create方法 代码如下所示 protected void AddNew() { _repo.Create(() => AddToListItem(x)) // I want

[事实上,我不确定问题是否与anonymous和delgate有关。]

在我的应用程序中,我使用异步创建新项。在AddNew方法中,它将从repo类调用createanewitem,然后将其添加到list item。create方法有参数,但有返回值

问题是我真的不知道如何用匿名调用create方法

代码如下所示

    protected void AddNew()
    {
        _repo.Create(() => AddToListItem(x)) // I want the value (x) that return from repository.Create to use with AddToListItem(x)
    }

    public P Create(Action completed = null)
    {
        var p = new P();
        Insert(p);
        return p;
    }

    public void Insert(P p, Action completed = null)
    {
        _service.Insert(p,
            () =>
            {
                if (onCompleted != null)
                {
                    onCompleted();
                }
            }
            );
    }

不要使用无参数的
操作
使用泛型:

封装具有单个参数且不返回值的方法

您的代码应该如下所示:

public P Create(Action<P> completed = null)
{
    var p = new P();
    Insert(p, completed);
    return p;
}

public void Insert(P p, Action<P> completed = null)
{
    _service.Insert(p,
        () =>
        {
            if (completed != null)
            {
                completed(p);
            }
        }
        );
}

不要使用无参数的
操作
使用泛型:

封装具有单个参数且不返回值的方法

您的代码应该如下所示:

public P Create(Action<P> completed = null)
{
    var p = new P();
    Insert(p, completed);
    return p;
}

public void Insert(P p, Action<P> completed = null)
{
    _service.Insert(p,
        () =>
        {
            if (completed != null)
            {
                completed(p);
            }
        }
        );
}

不要使用无参数的
操作
使用泛型:

封装具有单个参数且不返回值的方法

您的代码应该如下所示:

public P Create(Action<P> completed = null)
{
    var p = new P();
    Insert(p, completed);
    return p;
}

public void Insert(P p, Action<P> completed = null)
{
    _service.Insert(p,
        () =>
        {
            if (completed != null)
            {
                completed(p);
            }
        }
        );
}

不要使用无参数的
操作
使用泛型:

封装具有单个参数且不返回值的方法

您的代码应该如下所示:

public P Create(Action<P> completed = null)
{
    var p = new P();
    Insert(p, completed);
    return p;
}

public void Insert(P p, Action<P> completed = null)
{
    _service.Insert(p,
        () =>
        {
            if (completed != null)
            {
                completed(p);
            }
        }
        );
}


上面的代码不是异步的。此外,你到底想做什么还不清楚。请详细说明。上面的代码不是异步的。此外,你到底想做什么还不清楚。请详细说明。上面的代码不是异步的。此外,你到底想做什么还不清楚。请详细说明。上面的代码不是异步的。此外,你到底想做什么还不清楚。请详细说明。然后在最后一个方法中,您甚至可以去掉lambda,因为参数列表只是不加更改地传递给一个方法,所以您可以说
\u repo.Create(AddToListItem)如果你喜欢。@JeppeStigNielsen是的,你说得对!我总是忘记这一点,因为我个人觉得这种方法不如
x=>Method(x)
。为什么不那么可靠?它甚至删除了一个额外的方法调用:为lambda生成的方法。@riezebosch您误读了我的评论。我认为它的可读性较差,而不是可靠性较低。在最后一种方法中,您甚至可以去掉lambda,因为参数列表只是不加更改地传递给一个方法,所以您可以说
\u repo.Create(AddToListItem)如果你喜欢。@JeppeStigNielsen是的,你说得对!我总是忘记这一点,因为我个人觉得这种方法不如
x=>Method(x)
。为什么不那么可靠?它甚至删除了一个额外的方法调用:为lambda生成的方法。@riezebosch您误读了我的评论。我认为它的可读性较差,而不是可靠性较低。在最后一种方法中,您甚至可以去掉lambda,因为参数列表只是不加更改地传递给一个方法,所以您可以说
\u repo.Create(AddToListItem)如果你喜欢。@JeppeStigNielsen是的,你说得对!我总是忘记这一点,因为我个人觉得这种方法不如
x=>Method(x)
。为什么不那么可靠?它甚至删除了一个额外的方法调用:为lambda生成的方法。@riezebosch您误读了我的评论。我认为它的可读性较差,而不是可靠性较低。在最后一种方法中,您甚至可以去掉lambda,因为参数列表只是不加更改地传递给一个方法,所以您可以说
\u repo.Create(AddToListItem)如果你喜欢。@JeppeStigNielsen是的,你说得对!我总是忘记这一点,因为我个人觉得这种方法不如
x=>Method(x)
。为什么不那么可靠?它甚至删除了一个额外的方法调用:为lambda生成的方法。@riezebosch您误读了我的评论。我认为它不那么可读,也不那么可靠。