如何使用参数调用扩展方法
How to invoke extension method with parametrs
我得到了以下扩展方法:
private RemarkItem GetRemarkItem(XElement xDataItem)
{
return new RemarkItem
{
RemarkType = RemarkType.Type1,
Description = "bla bla" // temp
};
}
private RemarkItem GetRemarkItem(XElement xDataItem, RemarkType type)
{
return new RemarkItem
{
RemarkType = type,
Description = "bla bla" // temp
};
}
我知道如何使用单个参数调用方法:
IEnumerable<RemarkItem> remarkItems = xDoc.XPathSelectElements(
"./Root/Remarks/Remark").Select(GetRemarkItem);
但我不知道如何调用带有 2 个参数的方法...
任何帮助将不胜感激
'extension method' 部分放在一边,将您的 Select 调用更改为 x=>GetRemarkItem(x)
IEnumerable<RemarkItem> remarkItems = xDoc.XPathSelectElements(
"./Root/Remarks/Remark")
.Select(node => GetRemarkItem(node));
IEnumerable<RemarkItem> remarkItems = xDoc.XPathSelectElements(
"./Root/Remarks/Remark")
.Select(node => GetRemarkItem(node, RemarkType.TypeA));
首先,您应该创建一个正确的扩展方法实现:
public static class Extensions
{
public static RemarkItem GetRemarkItem(this XElement xDataItem)
{
return new RemarkItem
{
RemarkType = RemarkType.Type1,
Description = "bla bla" // temp
};
}
public static RemarkItem GetRemarkItem(this XElement xDataItem, RemarkType type)
{
return new RemarkItem
{
RemarkType = type,
Description = "bla bla" // temp
};
}
}
那么你可以这样使用它们:
IEnumerable<RemarkItem> remarkItems = xDoc.XPathSelectElements(
"./Root/Remarks/Remark").Select(GetRemarkItem);
或
IEnumerable<RemarkItem> remarkItems = xDoc.XPathSelectElements(
"./Root/Remarks/Remark").Select(n => n.GetRemarkItem());
或
IEnumerable<RemarkItem> remarkItems = xDoc.XPathSelectElements(
"./Root/Remarks/Remark").Select(n => n.GetRemarkItem(RemarkType.Type1));
如果您想了解有关扩展方法的更多信息,请访问此 link:https://msdn.microsoft.com/en-us//library/bb383977.aspx
我得到了以下扩展方法:
private RemarkItem GetRemarkItem(XElement xDataItem)
{
return new RemarkItem
{
RemarkType = RemarkType.Type1,
Description = "bla bla" // temp
};
}
private RemarkItem GetRemarkItem(XElement xDataItem, RemarkType type)
{
return new RemarkItem
{
RemarkType = type,
Description = "bla bla" // temp
};
}
我知道如何使用单个参数调用方法:
IEnumerable<RemarkItem> remarkItems = xDoc.XPathSelectElements(
"./Root/Remarks/Remark").Select(GetRemarkItem);
但我不知道如何调用带有 2 个参数的方法...
任何帮助将不胜感激
'extension method' 部分放在一边,将您的 Select 调用更改为 x=>GetRemarkItem(x)
IEnumerable<RemarkItem> remarkItems = xDoc.XPathSelectElements(
"./Root/Remarks/Remark")
.Select(node => GetRemarkItem(node));
IEnumerable<RemarkItem> remarkItems = xDoc.XPathSelectElements(
"./Root/Remarks/Remark")
.Select(node => GetRemarkItem(node, RemarkType.TypeA));
首先,您应该创建一个正确的扩展方法实现:
public static class Extensions
{
public static RemarkItem GetRemarkItem(this XElement xDataItem)
{
return new RemarkItem
{
RemarkType = RemarkType.Type1,
Description = "bla bla" // temp
};
}
public static RemarkItem GetRemarkItem(this XElement xDataItem, RemarkType type)
{
return new RemarkItem
{
RemarkType = type,
Description = "bla bla" // temp
};
}
}
那么你可以这样使用它们:
IEnumerable<RemarkItem> remarkItems = xDoc.XPathSelectElements(
"./Root/Remarks/Remark").Select(GetRemarkItem);
或
IEnumerable<RemarkItem> remarkItems = xDoc.XPathSelectElements(
"./Root/Remarks/Remark").Select(n => n.GetRemarkItem());
或
IEnumerable<RemarkItem> remarkItems = xDoc.XPathSelectElements(
"./Root/Remarks/Remark").Select(n => n.GetRemarkItem(RemarkType.Type1));
如果您想了解有关扩展方法的更多信息,请访问此 link:https://msdn.microsoft.com/en-us//library/bb383977.aspx