私は動的計算フレームワークの構築に取り組んでいます。これにより、計算タイプとそれらのタイプの属性に基づいて汎用GUIが構築されます。
たとえば、単純な加算器計算機を使用している場合があります(単純さは許しますが、フレームワークをまとめるときは、単純なものから始めて、上に向かって進んでいきます)。
[CalculatorAttribute("This calculator add X+Y=Z")]
class AdderCalculator : CalculatorBase
{
[CalculationValueAttribute(InputOutputEnum.InputValue, "First Input")]
public int? X
{
set { m_X = value; m_Z = null;}
get { return m_X; }
}
[CalculationValueAttribute(InputOutputEnum.InputValue, "Second Input")]
public int? Y
{
set{ m_Y = value; m_Z = null;}
get { return m_Y; }
}
[CalculationValueAttribute(InputOutputEnum.OutputValue, "Output")]
public int? Z
{
get { return m_Z; }
}
public AdderCalculator()
{
m_X = m_Y = m_Z = null;
}
public override Boolean ReadyToCalc()
{
return (m_X != null && m_Y != null);
}
public override Boolean NeedToCalc()
{
return (m_Z == null);
}
public override void Calculate()
{
if(ReadyToCalc()){ m_Z = m_X + m_Y;}
}
private int? m_X, m_Y, m_Z;
}
(空白を許して、読みやすさをあまり犠牲にせずに、できるだけサイズを小さくしようとしました)。
null許容型を使用して、未設定の値と設定済みの値を区別できるようにしています
現在、GUIでは、TextBox
esを使用して入力情報を収集しています。からTextBox
、テキスト(文字列)しか取得できません。リフレクションを使用して、プロパティの名前を知っており、セッター(set_X
またはset_Y
この場合)を取得できます。
The type of the field is (of course) int?
(nullable int), but I can use:
PropertyInfo.PropertyType.GetGenericArguments();
method to get the Int32
type (or Int64
, whichever may be the case).
So, given that I can end up with a instance of a Type
object, can anyone recommend a generic way to convert String
to that type
What I have considered is:
- Implement a string setter method in my AdderCalculator:
set_X(String s)
- Change my control type to
NumericUpDown
, as it will return aDecimal
- change the type to
Decimal
, butDecimal
can't directly convert fromString
either (it can use parse, but that is tougher from a generic standpoint
Can anyone provide additional insight?