[英]How to dynamically cast an object of type string to an object of type T
我有這個XML文檔
<AdditionalParameters>
<PublishToPdf Type ="System.Boolean">False</PublishToPdf>
</AdditionalParameters>
在我的代碼中,我正在嘗試構建一個包含<PublishToPdf>
節點的參數數組。
object test = (object) ((typeof(publishNode.Attributes["Type"].value)) publishNode.InnerText);
當然,這在編譯時會中斷。 我無法弄清楚如何將publishNode.InnerText('false')
轉換為XML文件中指定類型的運行時定義對象,並將其存儲在一個對象中(這將保留該類型)。
您可以使用Convert.ChangeType
:
object value = Convert.ChangeType(stringValue, destinationType);
你無法完全按照自己的意願去做。 首先, typeof
關鍵字不允許在運行時進行動態評估。 有一些方法可以使用反射來實現,使用Type.GetType(string)
等方法,但是從這些反射函數返回的Type
對象不能用於像cast這樣的操作。
您需要做的是提供一種將類型轉換為字符串表示形式的方法。 任何類型都沒有自動轉換。 對於您的示例,您可以使用bool.Parse
或bool.TryParse
,但這些特定於bool
類型。 大多數原始類型都有類似的方法。
簡單的解決方案,假設可能的類型有限;
object GetValueObject(string type, string value)
{
switch (type)
{
case "System.Boolean":
return Boolean.Parse(value);
case "System.Int32":
return Int32.Parse(value);
...
default:
return value;
}
}
var type = publishNode.Attributes["Type"].value;
var value = publishNode.InnerText;
var valueObject = GetValueObject(type, value);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.