相关疑难解决方法(0)

使用C#更好地搜索所有文件中的字符串

在参考了很多博客和文章之后,我已经达到了以下代码,用于在文件夹内的所有文件中搜索字符串.它在我的测试中运行良好.

质询

  1. 有没有更快的方法(使用C#)?
  2. 是否有任何方案会因此代码而失败?

注意:我测试了非常小的文件.文件数量也很少.

static void Main()
    {
        string sourceFolder = @"C:\Test";
        string searchWord = ".class1";

        List<string> allFiles = new List<string>();
        AddFileNamesToList(sourceFolder, allFiles);
        foreach (string fileName in allFiles)
        {
            string contents = File.ReadAllText(fileName);
            if (contents.Contains(searchWord))
            {
                Console.WriteLine(fileName);
            }
        }

        Console.WriteLine(" ");
        System.Console.ReadKey();
    }

    public static void AddFileNamesToList(string sourceDir, List<string> allFiles)
    {

            string[] fileEntries = Directory.GetFiles(sourceDir);
            foreach (string fileName in fileEntries)
            {
                allFiles.Add(fileName);
            }

            //Recursion    
            string[] subdirectoryEntries = Directory.GetDirectories(sourceDir);
            foreach (string item in subdirectoryEntries)
            {
                // Avoid "reparse points" …
Run Code Online (Sandbox Code Playgroud)

.net c# file-io

28
推荐指数
2
解决办法
4万
查看次数

基于Linq的谓词替代谓词<T>?

我有一个名为ICatalog如下所示的接口,其中每个接口ICatalog都有一个名称和一个基于Predicate<Item>函数返回项目的方法.

public interface ICatalog
{
     string Name { get; }
     IEnumerable<Item> GetItems(Predicate<Item> predicate);
}
Run Code Online (Sandbox Code Playgroud)

目录的特定实现可以链接到各种格式的目录,例如XML或SQL数据库.

使用XML目录,我最终将整个XML文件反序列化为内存,因此使用谓词函数测试每个项目并不会增加更多的开销,因为它已经在内存中.

然而,在SQL实现中,我宁愿不将数据库的全部内容检索到内存中,然后使用谓词函数过滤项目.相反,我想找到一种方法以某种方式将谓词传递给SQL服务器,或以某种方式将其转换为SQL查询.

这似乎是一个可以用Linq解决的问题,但我对它很陌生.我的界面应该返回IQueryable吗?我现在不关心如何实际实现我的ICatalog的SQL版本.我只是想确保我的界面将来允许它.

.net c# linq iqueryable

9
推荐指数
2
解决办法
891
查看次数

根据谓词拆分字符串

我想根据谓词拆分一个字符串.举个例子:

"ImageSizeTest"应该成为"图像大小测试"

注意:Uppercased字符是谓词

当然,我可以编写一个简单的循环,遍历字符串,检查大写字符(谓词)并构建新字符串.但是我希望这更加通用,基于任何谓词进行拆分.仍然不是很难实现,但我想知道是否有一种优雅的方式来使用它Linq.

参考:

  1. 使用两个条件拆分字符串

c# linq

6
推荐指数
1
解决办法
732
查看次数

是否有更好的方法来获取每个项与谓词匹配的子序列?

说我有一个IEnumerable.例如,{2,1,42,0,9,6,5,3,8}.

我需要获得与谓词匹配的项目的"运行".例如,如果我的谓词是

bool isSmallerThanSix(int number){...}
Run Code Online (Sandbox Code Playgroud)

我想获得以下输出:{{2,1},{0},{5,3}}

是否有内置功能可以实现这一目标?

到目前为止我有这个:

public static IEnumerable<IEnumerable<T>> GetSequences<T>(this IEnumerable<T> source,
      Func<T, bool> selector) {

        if (source == null || selector == null) {
            yield break;
        }

        IEnumerable<T> rest = source.SkipWhile(obj => !selector(obj));

        while (rest.Count() > 0) {
            yield return rest.TakeWhile(obj => selector(obj));
            rest = rest
                    .SkipWhile(obj => selector(obj))
                    .SkipWhile(obj => !selector(obj));
        }


    }
Run Code Online (Sandbox Code Playgroud)

这看起来很有效,但是我是在半夜写的,因此从星期二开始就效率低十五.是否有更好的,最好是内置(因此经过良好测试)的方式?

非常感谢你们的时间,

利雅.

c# linq

4
推荐指数
1
解决办法
313
查看次数

标签 统计

c# ×4

linq ×3

.net ×2

file-io ×1

iqueryable ×1