如何使用参数调用扩展方法

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