我现在已经在这里工作了至少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};
答案 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 :).
}