C# 如何将带有外部参数的lambda放入回调函数中
我有以下代码,基本上满足了我的要求:C# 如何将带有外部参数的lambda放入回调函数中,c#,linq,lambda,callback,C#,Linq,Lambda,Callback,我有以下代码,基本上满足了我的要求: string firstName = "Chuck"; string lastName = "Norris"; filtered = dvds.Where( dvd => (dvd.Element("Actors") != null) && (dvd.Element("Actors").Elements("Actor").Where( actor => actor.Att
string firstName = "Chuck";
string lastName = "Norris";
filtered = dvds.Where(
dvd => (dvd.Element("Actors") != null) && (dvd.Element("Actors").Elements("Actor").Where(
actor => actor.Attribute("FirstName") != null && actor.Attribute("FirstName").Value == firstName
&& actor.Attribute("LastName") != null && actor.Attribute("LastName").Value == lastName)).Count() > 0);
如你所见,lambda相当大。我希望在第一个.Where调用中使用回调方法。但我不知道如何将firstName和lastName参数输入到该回调方法中
这可能吗?您不能只将方法传递给第一个
位置,因为您还需要传递名字和姓氏,但可以传递更简单的lambda。。。下面是一个可能的重构:
filtered = dvds.Where(dvd => HasActor(dvd, firstName, lastName));
...
bool HasActor(XElement dvd, string firstName, string lastName)
{
var actors = dvd.Element("Actors");
if (actors != null)
[
var actor = actor.FirstOrDefault(a => IsActor(a, firstName, lastName));
return actor != null;
}
return false;
}
bool IsActor(XElement actor, string firstName, string lastName)
{
string firstNameAttr = actor.Attribute("FirstName");
string lastNameAttr = actor.Attribute("LastName");
return firstNameAttr != null
&& firstNameAttr.Value == firstName
&& lastNameAttr != null
&& lastNameAttr.Value == lastName;
}
您不能只将方法传递给第一个,其中
,因为您还需要传递名字和姓氏,但您可以传递一个更简单的lambda。。。下面是一个可能的重构:
filtered = dvds.Where(dvd => HasActor(dvd, firstName, lastName));
...
bool HasActor(XElement dvd, string firstName, string lastName)
{
var actors = dvd.Element("Actors");
if (actors != null)
[
var actor = actor.FirstOrDefault(a => IsActor(a, firstName, lastName));
return actor != null;
}
return false;
}
bool IsActor(XElement actor, string firstName, string lastName)
{
string firstNameAttr = actor.Attribute("FirstName");
string lastNameAttr = actor.Attribute("LastName");
return firstNameAttr != null
&& firstNameAttr.Value == firstName
&& lastNameAttr != null
&& lastNameAttr.Value == lastName;
}
有时你看不见森林,只看到树木。当然(!)我可以调用另一个方法并传递附加参数。现在我觉得自己很愚蠢-/有时你看不见森林,只看到树木。当然(!)我可以调用另一个方法并传递附加参数。现在我觉得自己很愚蠢-/