請參閱下面的Tim答案。
我看到你想要將字符串轉換爲你的自定義類型。 當然,您需要明確定義這種轉換是如何發生的。
您可以實現implicit或explicit轉換操作符:
public class A
{
public static implicit operator string(A a)
{
// allows:
// var a = new A();
// string x = a;
return "A converted to string";
}
public static explicit operator A(string s)
{
// allows:
// var s = "something";
// var a = (A)s;
return new A();
}
}
注意:您可以使用隱性和顯性的轉換兩種方式。我之所以選擇明確而另一個隱含是因爲演示的目的。
您可以將其與允許Convert.ChangeType結合使用。在引擎蓋下,這會將您的值轉換爲IConvertible,然後使用switch語句調用正確的轉換方法。 (見reference source)。請注意,它使用TypeCode而不是類型,所以它也適用於Enums和您自己的類,如果您實現IConvertible.GetTypeCode方法。 你可以這樣調用它:
var d = (decimal)System.Convert.ChangeType("17.4", typeof(decimal));
你可以使它有點類型安全通過包裝它像這樣:
static TTargetType ParseTo<TTargetType>(string target)
{
return (TTargetType)System.Convert.ChangeType(target, typeof(TTargetType));
}
,你可以使用這樣的:
var d = ParseTo<decimal>("17.4");
但大多數情況下,如果只使用類型本身的解析方法,則效果會更好:
var d = decimal.Parse("17.4");
https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/capitalization-conventions –
與轉換爲字符串相反的是* parsing *。你將不得不解析字符串並從中構造新的'a'對象。 – Sinatr
如果我是你,我會質疑那本編程書。 IFormattable接口僅用於將對象轉換爲其字符串表示形式。從MSDN:'IFormattable接口將對象轉換爲基於格式字符串和格式提供程序的字符串表示形式。' – decPL