[英]Convert the user defined type to string and string to user defined type
为什么.NET不提供从字符串到定义的类型以及从定义的类型到字符串的隐式或显式转换?
例:
public class MyClass
{
public int Id;
public MyClass()
{
}
}
我可以:
var myClass = new MyClass() {Id=1};
string myClassString = myClass.ToString();
为什么我不能做?
var myClassConverted = (MyClass) myClassString ;
是否有任何可以序列化的模式?
.ToString()
只是一个方法,它可以返回任何String值,这不会将类转换为String。
我们已经有一些关于将类转换为文本的问题:
我个人使用更多的XML序列化方法,非常容易序列化和反序列化,并且可以与REST或SOAP等外部服务一起很好地工作。
ToString()
是在Object
类上定义的方法,该方法返回一个新的字符串实例,而不是类型转换。
没有可用于将String
转换为类的转换,但是您可以定义自己的自定义转换运算符。
public class MyClass
{
public int Id;
public MyClass()
{
}
public static explicit operator MyClass(string s)
{
MyClass temp = new MyClass() { Id = Int32.Parse(s) };
// you should handle exceptions when string is not convertible to int
return temp;
}
}
然后,您可以使用转换:
MyClass c = (MyClass)("1");
从MSDN:
C#使程序员可以在类或结构上声明转换,以便可以将类或结构与其他类或结构或基本类型进行相互转换。 转换的定义类似于运算符,并以其转换为的类型命名。 要转换的参数的类型或转换结果的类型(但不能两者都必须)必须是包含的类型。
转换运算符具有以下属性:
需要时,声明为隐式的转换会自动发生。
声明为显式的转换需要强制转换。
所有转换必须声明为静态。
您可以在MSDN上找到更多信息。
引用msdn Object.ToString方法 :
ToString方法的默认实现返回Object类型的标准名称,如以下示例所示。
using System;
public class Example
{
public static void Main()
{
Object obj = new Object();
Console.WriteLine(obj.ToString());
}
}
// The example displays the following output:
// System.Object
.ToString()
不包含当前对象的任何唯一信息,因此您无法从此字符串重建对象。
如果要序列化或反序列化对象,请在此处查看:
您不能真正将ToString()
与“显式强制转换”进行比较。 两者的确不同。
合理的比较应该是这样的。 您应该尝试将“ MyClass转换为字符串”,否则将失败。
* [1]不允许从MyClass
强制转换为string
,也不允许将string
强制转换为MyClass`。
var myClass = new MyClass() {Id=1};
string myClassString = (string)myClass;//Note this also will fails since no conversion beween `MyClass` to `string`
理想情况下,当您比较ToString
方法时,您应该将它与FromString
方法进行比较。
回到您的问题
var myClassConverted = (MyClass)myClassString;
为什么我不能做?
因为在string
到MyClass
之间没有隐式或显式转换。
[1]为使其正常工作,您可以使用implicit
或explicit
运算符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.