C# 返回值为的匿名委托
[事实上,我不确定问题是否与anonymous和delgate有关。] 在我的应用程序中,我使用异步创建新项。在AddNew方法中,它将从repo类调用createanewitem,然后将其添加到list item。create方法有参数,但有返回值 问题是我真的不知道如何用匿名调用create方法 代码如下所示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
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您误读了我的评论。我认为它不那么可读,也不那么可靠。