変数の値を変更しようとしていますが、変数の名前が文字列としてしかありません。これは一般的に理想的ではないことは理解していますが、私の状況では必要であると想定してください。変更したい変数はタイプElement
で、作成したクラスは次のようになります。
public class Element
{
public string TopBoundReplace;
public string RightBoundReplace;
public string BottomBoundReplace;
public List<string> ConfidenceString {get; set;}
public string LeftBoundReplace { get; set; }
public string Regex { get; set; }
public string ReplaceString { get; set; }
public List<int> LeftBound { get; set; }
public List<int> TopBound { get; set; }
public List<int> BottomBound { get; set; }
public List<int> RightBound { get; set; }
public string Whitelist { get; set; }
public List<System.Drawing.Rectangle> Rectangle { get; set; }
public System.Drawing.Rectangle SourceBox { get; set; }
public List<string> Value { get; set; }
public Element()
: this("", "", "", new List<int>(), new List<int>(), new List<int>(),new List<int>(), "", new List<Rectangle>(), new System.Drawing.Rectangle(), new List<string>(), new List<string>())
{
}
public Element(string leftBoundReplace, string regex, string replaceString, List<int> leftBound, List<int> topBound, List<int> bottomBound, List<int> rightBound, string whitelist, List<System.Drawing.Rectangle> rectangle, System.Drawing.Rectangle sourceBox, List<string> value, List<string> confidenceString)
{
Regex = regex;
ReplaceString = replaceString;
LeftBound = leftBound;
TopBound = topBound;
BottomBound = bottomBound;
RightBound = rightBound;
Whitelist = whitelist;
Rectangle = rectangle;
SourceBox = sourceBox;
Value = value;
LeftBoundReplace = leftBoundReplace;
ConfidenceString = confidenceString;
}
}
Elementsは、ocrVarと呼ばれる別のクラスで初期化されます。これは次のようになります(この質問の目的でトリミングされています)。
public class ocrVar
{
public static Element DueDate = new Element();
public static Element AmountDue = new Element();
public static Element BillDate = new Element();
}
したがって、通常は、次のようにして問題の値を編集します。
ocrVar.DueDate.Value[0] = "10/25/2012";
文字列値だけを変数名としてこれを行うにはどうすればよいですか?私はいくつかのReflectionのものを試しました:
Type myType = ocrVar.BillDate.GetType();
PropertyInfo myPropInfo = myType.GetProperty("DueDate");
myTypeは最終的に正しいタイプ(Element
)を取得しますが、「DueDate」はクラスのプロパティではなく、Element
クラスのプロパティであるため、上記のコードを実行するとmyPropInfoはnullのままになりますocrVar
。上記のコードのようなことを実行して、DueDateの値を取得し、値をElement
操作してから、それらをocrVar.DueDateに戻すことができます。