我知道我可以找到特定类型的文件然后一次性grep它们,即
find . -type f -name "*.log" -exec grep -o "some-pattern" {} \;
Run Code Online (Sandbox Code Playgroud)
但我需要分两步完成.这是因为查找操作很昂贵(有很多文件和子目录要搜索).我想将文件列表保存到文本文件中,然后在需要时反复grep查看此预先计算的文件集上的不同模式.第一部分很简单:
find . -type f -name "*.log" > my-file-list.txt
Run Code Online (Sandbox Code Playgroud)
现在我有一个看起来像这样的文件:
./logs/log1.log
./logs/log2.log
etc
Run Code Online (Sandbox Code Playgroud)
grep是什么样的?我尝试了几种组合,但无法做到正确.
假设我有以下课程:
public class Values {
public string Value1 {get;set;}
public string Value2 {get;set;}
public string Value3 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
现在我想使用IValueConverter以特定顺序将此对象的值绑定到GUI组件的ItemsSource:
public class ValuesToListConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var valuesObj = (Values ) value;
yield return valuesObj.Value1;
yield return valuesObj.Value3;
yield return valuesObj.Value2;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我收到以下错误:
'Convert'的主体不能是迭代器块,因为'object'不是迭代器接口类型.
有没有办法在IValueConverter中懒洋洋地创建这个列表?或者我必须这样做:
return new List<string> { valuesObj.Value1, valuesObj.Value3, valuesObj.Value2 }
Run Code Online (Sandbox Code Playgroud)