我正在修改几个文件的内容。我在表格中有这个正则表达式,它直接从按钮的点击事件中调用。
public partial class MainForm : Form
{
private void UpdateButton_Click(object sender, EventArgs e)
{
// code
if (!OldURLBox.Text.IsEmpty() && !NewURLBox.Text.IsEmpty())
{
Regex patternURL = new Regex(string.Format("s:\\d+:\\\\\"((.(?!s:\\d+))*?){0}(.*?)\\\\\";", OldURL));
content = patternURL.Replace(content, delegate(Match m) // works fine
{
var prefix = m.Groups[1].Value;
var postfix = m.Groups[3].Value;
var length_prefix = prefix.Replace("\\n", "$").Length;
var length_postfix = postfix.Replace("\\n", "$").Length;
var length_total = length_prefix + NewURL.Length + length_postfix;
return string.Format("s:{0}:\\\"{1}{2}{3}\\\";", length_total, prefix, NewURL, postfix);
});
}
// code
}
}
这很好用。我已将此代码(正则表达式替换)移动到另一个项目并收到以下错误:
如果没有先将lambda表达式转换为委托或表达式树类型,则不能将lambda表达式用作动态调度操作的参数
我没有直接在事件函数中调用正则表达式替换,我想这就是导致错误的原因。我不知道如何解决它。检查以下代码。这是我正在使用的结构。省略了不成功的部分。
public partial class ProgressForm : Form
{
private void ProgressForm_Load(object sender, EventArgs e)
{
// when run without delay, it freezes, waits for targz extraction
System.Timers.Timer timer = new System.Timers.Timer(500);
timer.Elapsed += (sender2, e2) => OnTimedEvent(sender2, e2);
timer.AutoReset = false;
timer.Enabled = true;
}
private void OnTimedEvent(Object source, ElapsedEventArgs e)
{
this.BeginInvoke((MethodInvoker)delegate
{
if (File.Exists(Template.File.ArchiveTarGz))
{
// code; extract files from archive
ModifyFiles();
// code; repack files
}
});
}
private void ModifyFiles()
{
// code
Regex patternURL = new Regex(string.Format("s:\\d+:\\\\\"((.(?!s:\\d+))*?){0}(.*?)\\\\\";", Template.Website.URL));
DBText = patternURL.Replace(DBText, delegate(Match m) // Error: Cannot use a lambda expression as an argument ...
{
var prefix = m.Groups[1].Value;
var postfix = m.Groups[3].Value;
var length_prefix = prefix.Replace("\\n", "$").Length;
var length_postfix = postfix.Replace("\\n", "$").Length;
var length_total = length_prefix + UserInput.Website.URL.Length + length_postfix;
return string.Format("s:{0}:\\\"{1}{2}{3}\\\";", length_total, prefix, UserInput.Website.URL, postfix);
});
// code
}
}
这可能是重复的,因为这个确切的错误还有其他问题,但我找不到我可以在我的代码中实现的东西。
有人可以将标题更改为更合适的标题。我不希望标题成为错误,因为已存在几个问题。
答案 0 :(得分:0)
您正在替换DBText的内容。 Regex.replace将字符串作为第一个参数。我猜测DBText属于动态类型,这使得编译器在这种特殊情况下感到困惑。
你可以简单地将DbText强制转换为字符串,你应该没问题
$ echo "1 2 3" |awk '{print}'
1 2 3