我可以将扩展方法添加到LIST <>吗?

时间:2019-02-03 13:15:54

标签: c#

我有此代码:

public static List<Phrase> selectedPhrases;

if  (!App.selectedPhrases.Any(x => x.Viewed == false))
                return;

有什么方法可以更改声明selectedPhrases的方式,以便我可以通过以下方式进行最后检查:

if  (App.selectedPhrases.AllViewed())
    return;

我听说过扩展方法,但是有可能像我的代码中那样为List创建一个扩展方法吗?

2 个答案:

答案 0 :(得分:3)

您可以在列表上编写扩展方法,例如短语

public static class Extension
{
    public static bool AllViewed(this List<Phrase> source)
    {
        return source.All(x=>x.Viewed)
    }
}

顺便说一句,您不需要检查!Any(x=>c.Viewed==false),可以选择使用.All()扩展方法,如上面的代码所示

您可以阅读有关扩展方法here的语法的更多信息。

您可能也有兴趣通过查看一些源代码at referencesource来了解如何实现Linq扩展方法。

答案 1 :(得分:1)

您可以在静态类中创建扩展方法:

public static class PhraseExtensions
{
    public static bool AllViewed(this List<Phrase> phrases)
    {
        return !phrases.Any(p => !p.Viewed);
        // phrases.All(p => p.Viewed); would be better suited.
    }
}

在此处查看有关扩展的文档:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/extension-methods