使用RegExp的动态绑定标志算法

时间:2011-06-02 23:45:30

标签: c# regex dynamic binding

我现在已经在这里工作了至少3个小时--1.5 - 2其中只用于学习正则表达式才能做到这一点。我仍然无法理解它,但这不是优先考虑的事情:我宁愿先将这个算法刷新。

SO ..

在这里,我有一个很好的小方法接受一个字符串,它基本上应该包含一个短语,决定返回什么样的bindingflag。该字符串由regexpression评估。如果此表达式为true,则继续遍历一个列出要设置的正确BindingFlags设置的数组。我发现大部分问题 - 主要问题是A)简单性,B)最后两位:确保返回BindingFlag(我相信我已经完成了,但我仍然从中得到一个逻辑错误,所以显然我没有),并将字符串与实际的BindingFlag数组进行比较,以确定选择和返回哪个标志。

对我的水平有点复杂。这是代码:

private static BindingFlags CheckPropBinding(string bindFlagSpec) 
        {
            BindingFlags binderFlag; //--will be returned.

            string bindLower = bindFlagSpec.ToLower(); //--lowers string parameter.

            Match matchBinder; //--our matcher :).

            string regex = "regex dummy"; /*--this is a dummy which will be replaced when I've found the appropriate regex to use. */

            matchBinder = Regex.Match(bindLower, regex); 

            if (matchBinder.Success) //--if success, will go on...
            {
                for(int bindIndex = 0; bindIndex < bindings.Length; bindIndex++) /*--compares string with bindingFlag array */
                {
                    if (bindLower.Contains(bindings[bindIndex].ToString()))
                    {
                        binderFlag = bindings[bindIndex];

                        break;
                    }
                    else 
                    {
                        if (bindIndex == bindings.Length && !bindLower.Contains(bindings[bindings.Length].ToString())) 
                        {
                             binderFlag = BindingFlags.NonPublic; /*--this is just a

不得已检查,如果由于某种原因无法选择,则指定默认标志。* /                                  打破;                             }

                        continue;
                    }

                 }
            }


            return binderFlag; //--returned :).
       }

我可能还应该提到绑定标志数组字段:`

public class PropertyManagener
    {
        private static BindingFlags[] bindings = {BindingFlags.NonPublic, BindingFlags.Public, 
                                                     BindingFlags.Static, BindingFlags.Instance};

1 个答案:

答案 0 :(得分:1)

错误是因为您无法保证在返回之前初始化binderFlag。为什么不做这样的事呢?这会将binderFlag预先设置为您的默认返回值,这样如果您的算法无法确定要使用的内容,则返回NonPublic。

这至少会解决编译错误!不幸的是,我无法谈论你实施的算法的实际正确性。

    private static BindingFlags CheckPropBinding(string bindFlagSpec)         
    {
        BindingFlags binderFlag = BindingFlags.NonPublic;
        string bindLower = bindFlagSpec.ToLower(); //--lowers string parameter.            
        Match matchBinder; //--our matcher :).            
        string regex = "regex dummy"; /*--this is a dummy which will be replaced when I've found the appropriate regex to use. */            
        matchBinder = Regex.Match(bindLower, regex);
        if (matchBinder.Success) //--if success, will go on...            
        {
            foreach (BindingFlags t in bindings)
            {
                if (bindLower.Contains(t.ToString()))
                {
                    binderFlag = t;
                    break;
                }
            }
        }
        return binderFlag; //--returned :).       
    }