0
我正在構建一個動態計算框架,它將根據這些類型的計算類型和屬性構建一個通用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;
}
(原諒空白,我儘可能減小尺寸而不犧牲太多的可讀性)。
我使用的是可空類型,讓我從集合區分未設置值的值
現在,在我的GUI,我使用TextBox
ES收集的輸入信息。從TextBox
,我只能得到文本(字符串)。使用反射,我知道財產的名稱,並可以得到它的設置(在這種情況下,set_X
或set_Y
)。
的類型字段的是(當然)int?
(可爲空的INT),但我可以使用:
PropertyInfo.PropertyType.GetGenericArguments();
方法來獲得Int32
型(或Int64
,取其可能是這種情況)。
所以,因爲我能最終有一個Type
對象的實例,任何人都可以推薦一個通用的方法來String
轉換成該類型
我所考慮的是:
- 實現一個在我AdderCalculator字符串setter方法:
set_X(String s)
- 更改我的控制類型
NumericUpDown
,因爲它會返回一個Decimal
- 變化的典型E要
Decimal
,但Decimal
不能直接從String
既轉換(它可以使用解析,但畢竟是從一個普通的角度看
任何人都可以提供額外的觀點強硬?
看看[這個問題] [1]的答案是否有幫助? [1]:http://stackoverflow.com/questions/312858/how-can-i-convert-types-at-runtime – nikeaa 2013-02-11 21:29:35
@nikeaa - 感謝,看起來像「對象o =轉換。 ChangeType(c.Text,ti);'將爲我所需要的工作。仍然需要小心並處理異常情況。我發誓我搜索了一個小時如何做到這一點,我想我的搜索太狹窄了......欣賞指針。 – 2013-02-11 21:53:05