首页 > 解决方案 > 从 MatchEvaluator 委托调用的方法中返回一个 out 参数值?

问题描述

我有现有的方法,每个方法都返回一个 String 类型。现在,我需要从一个方法返回附加值并将其传递给另一个。我发现一种方法是使用“out 参数”。

我要返回的值 (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;
    }
}

标签: c#outmatchevaluator

解决方案


看起来,您选择了无效的架构。但是,你可以很巧妙地做到这一点:

        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 中的闭包


推荐阅读