Я занимался этим по крайней мере 3 часа - 1,5-2 из которых были потрачены на изучение регулярных выражений, чтобы сделать это. Я до сих пор близко не понимаю его, но это не совсем приоритет: я бы предпочел сначала очистить этот алгоритм.
SO ..
Здесь у меня есть приятный маленький метод, который принимает строку, которая, как правило, должна содержать фразу, определяющую, какой тип флага привязки нужно вернуть. Строка оценивается регулярным выражением. Если это выражение принимает значение 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
проверка в крайнем случае, присвоение флага по умолчанию, если по какой-либо причине его нельзя выбрать. * /
перерыв;
} * +1010 *
continue;
}
}
}
return binderFlag; //--returned :).
}
Возможно, мне следует также упомянуть поле массива привязки флагов: `
public class PropertyManagener
{
private static BindingFlags[] bindings = {BindingFlags.NonPublic, BindingFlags.Public,
BindingFlags.Static, BindingFlags.Instance};