几个常用的LINQ查询

用来备份,以后更新并查阅。:)

 

#region GetFiles

/// <summary>
/// 获得指定路径下的所有文件
/// </summary>
/// <param name="path">有效路经</param>
/// <returns></returns>
public IEnumerable<FileInfo> GetFiles(string path)
{
    DirectoryInfo directory = new DirectoryInfo(path);
    if (directory == null)
        return null;
    return
        from f in directory.GetFiles()
        select f;
}

/// <summary>
/// 测试GetFiles
/// </summary>
[TestMethod]
public void TestGetFiles()
{
    string path = Environment.SystemDirectory;
    var result = GetFiles(path);
    Assert.IsNotNull(result);
    foreach (var item in result)
    {
        Assert.IsInstanceOfType(item, typeof(FileInfo));
        Assert.IsTrue(File.Exists(item.FullName));
    }
}

#endregion

#region GetReturnSpecifiedInterfacedMethods

/// <summary>
/// 获得指定Assembly中返回指定接口类型名称的方法信息
/// </summary>
/// <param name="assembly">Assembly</param>
/// <param name="interfaceType">接口类型名称</param>
/// <returns></returns>
public IEnumerable<MethodInfo> GetReturnSpecifiedInterfacedMethods(Assembly assembly, string interfaceTypeName)
{
    if (assembly == null) throw new ArgumentNullException("assembly");
    if(string.IsNullOrEmpty(interfaceTypeName)) throw new ArgumentNullException("interfaceTypeName");

    return
        from type in assembly.GetTypes()
        from method in type.GetMethods()
        where
            method.ReturnType.GetInterface(interfaceTypeName) != null
        select method;
}

/// <summary>
/// 测试GetReturnSpecifiedInterfacedMethods
/// </summary>
[TestMethod]
public void TestGetReturnSpecifiedInterfacedMethods()
{
    string typeName = "IEnumerable`1";
    Assembly assembly = AppDomain.CurrentDomain.GetAssemblies()[0];
    var result = GetReturnSpecifiedInterfacedMethods(assembly, typeName);
    Assert.IsNotNull(result);
    foreach (var item in result)
    {
        Assert.IsInstanceOfType(item, typeof(MethodInfo));
        Assert.IsNotNull(item.ReturnType.GetInterface(typeName));
    }
}

#endregion

#region GetAssemblyStaticMethods

/// <summary>
/// 获得指定Assembly包含的静态方法信息
/// </summary>
/// <param name="assembly"></param>
/// <returns></returns>
public IEnumerable<MethodInfo> GetAssemblyStaticMethods(Assembly assembly)
{
    if (assembly == null) throw new ArgumentNullException("assembly");
    return
        from type in assembly.GetTypes()
        from method in type.GetMethods()
        where
            method.IsStatic
        select method;
}

/// <summary>
/// 测试GetAssemblyStaticMethods
/// </summary>
[TestMethod]
public void TestGetAssemblyStaticMethods()
{
    Assembly assembly = AppDomain.CurrentDomain.GetAssemblies()[0];
    var result = GetAssemblyStaticMethods(assembly);
    Assert.IsNotNull(result);
    foreach (var item in result)
    {
        Assert.IsInstanceOfType(item, typeof(MethodInfo));
        Assert.IsTrue(item.IsStatic);
    }
}

posted @   蜡笔小王  阅读(846)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示