Return 来自 MatchEvaluator 委托调用的方法的输出参数值?
Return an out parameter value from the method called by the MatchEvaluator delegate?
我有现有的方法,每个 return 都是一个 String 类型。现在,我需要 return 方法中的附加值并将其传递给另一个方法。我发现执行此操作的一种方法是使用 "out parameter"。
我想要 return 的值 (paramObject) 来自 MatchEvaluator 调用的方法
代表。
var result = Regex.Replace(param1, pattern, new MatchEvaluator(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;
}
详细了解 .net 中的闭包
我有现有的方法,每个 return 都是一个 String 类型。现在,我需要 return 方法中的附加值并将其传递给另一个方法。我发现执行此操作的一种方法是使用 "out parameter"。
我想要 return 的值 (paramObject) 来自 MatchEvaluator 调用的方法 代表。
var result = Regex.Replace(param1, pattern, new MatchEvaluator(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;
}
详细了解 .net 中的闭包