C# 是否从MatchEvaluator委托调用的方法返回out参数值?
我有一些现有的方法,每个方法都返回一个字符串类型。现在,我需要从一个方法返回附加值并将其传递给另一个方法。我发现一种方法是使用“out参数” 我要返回的值(paramObject)来自MatchEvaluator调用的方法 代表C# 是否从MatchEvaluator委托调用的方法返回out参数值?,c#,out,matchevaluator,C#,Out,Matchevaluator,我有一些现有的方法,每个方法都返回一个字符串类型。现在,我需要从一个方法返回附加值并将其传递给另一个方法。我发现一种方法是使用“out参数” 我要返回的值(paramObject)来自MatchEvaluator调用的方法 代表 var result=Regex.Replace(param1,pattern,newmatchevaluator(m=>MethodToMatch(m,param2,out SomeObject-paramObject)) 这可能吗?如果没有,有什么解决办法或其他方法
var result=Regex.Replace(param1,pattern,newmatchevaluator(m=>MethodToMatch(m,param2,out SomeObject-paramObject))代码>
这可能吗?如果没有,有什么解决办法或其他方法来实现这一点
提前感谢您的帮助
public class TextCompiler
{
public string Compile(string param1, string param2)
{
// some codes here ****
var pattern = @"@\{.*?}+";
var result = Regex.Replace(param1, pattern, new MatchEvaluator(m => MethodToMatch(m, param2, out SomeObject paramObject)));
// OnActionCompleted(paramObject); //the variable raises an error "The name does not exist in the current context."
return result;
}
protected string MethodToMatch(Match m, string param2, out SomeObject paramObject)
{
// Do something here ****
var myClass = new MyClass();
var cmd = "some strings";
string pm = myClass.Execute(cmd, param2, out SomeObject pObj);
paramObject = pObj;
return pm;
}
}
public class MyClass
{
public string Execute(string cmd, string param2, out SomeObject paramObject)
{
// ** Do something here..
var pObj = new SomeObject();
// ** Insert some values to pObj..
pObj = "some values here";
var str = "Example Only";
paramObject = pObj;
return str;
}
}
看起来,您选择了无效的体系结构。但是,你可以用黑客手段:
public string Compile(string param1, string param2)
{
// some codes here ****
var pattern = @"@\{.*?}+";
var objects = new List<Class1>();
var result = Regex.Replace(param1, pattern, m =>
{
var r = MethodToMatch(m, param2, out var paramObject);
objects.Add(paramObject);
return r;
});
OnActionCompleted(paramObjects);
return result;
}
公共字符串编译(字符串参数1,字符串参数2)
{
//这里有一些代码****
变量模式=@“@\{.*?}+”;
var objects=新列表();
var result=Regex.Replace(参数1,模式,m=>
{
var r=MethodToMatch(m,param2,out var paramObject);
添加(paramObject);
返回r;
});
OnActionCompleted(参数对象);
返回结果;
}
了解有关.net中闭包的更多信息它很有效,谢谢!然而,我只是好奇什么是“有效的架构”?我仍然需要阅读有关“.Net中的闭包”的内容。我还在学习……)