簡體   English   中英

如何將類型為string的對象動態轉換為類型為T的對象

[英]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.Parsebool.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM