我在c sharp中使用以下代码。但是两个WriteLine语句都给出了相同的结果25.那么在c sharp中转换Tostring需要什么?有什么特别的目的吗?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace sample
{
class Program
{
static void Main(string[] args)
{
int value = 25;
Console.WriteLine(value.ToString());
Console.WriteLine(value);
Console.ReadLine();
}
}
}
答案 0 :(得分:8)
如果我理解你的问题,ToString()
的目的是提供一种将对象转换为字符串的一致机制。在您的Console.WriteLine(value);
示例中,您使用的WriteLine
的重载版本需要int
,但在使用object
的一般情况下,系统需要一种提供文本表示。
答案 1 :(得分:5)
您应该覆盖类中的ToString
,以便为其提供所需的字符串表示形式。 Console.WriteLine
方法根据MSDN调用ToString
:
否则,调用
ToString
value方法来生成它 字符串表示,并将结果字符串写入 标准输出流。
以此课程为例:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
现在尝试显示它:
Console.WriteLine(new Person { Id = 42, Name = "Ahmad" });
该类不会覆盖ToString
,因此输出类似于:MyNamespace.Program+Person
现在,让我们覆盖ToString
以显示更友好的字符串表示形式:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public override string ToString()
{
return String.Format("{0} - {1}", Id, Name);
}
}
现在Console.WriteLine
会返回42 - Ahmad
。
答案 2 :(得分:3)
任何对象的ToString()
都应该返回该对象的字符串表示形式。在您的代码中,
Int32,它返回一个字符串对应的对象(整数的值)。
int value = 25;
Console.WriteLine(value.ToString());
答案 3 :(得分:3)
添加更多信息,如果您反编译您的程序,您可以找到
Console.WriteLine(value.ToString())
上面一行会调用
/**Methods are from mscorlib.dll**/
public virtual void Write(string value)
{
if (value != null)
{
this.Write(value.ToCharArray());
}
}
虽然
Console.WriteLine(值);
上面一行会调用
public virtual void Write(int value)
{
this.Write(value.ToString(this.FormatProvider));
}
如果你很想知道Cast是如何制作的(ToString),那么这可能对你有帮助。
答案 4 :(得分:2)
您可能知道Tostring()
返回表示当前对象的字符串。你是对的(有和没有Tostring()
)会返回相同的结果,因为即使你不使用Tostring()
,也会有一个隐式调用,因为Console.writeline()
打印了一个字符串表示。
详细了解this here.
答案 5 :(得分:1)
当您将对象传递给WriteLine时,.NET会隐式调用ToString方法。
答案 6 :(得分:1)
在编程语言中,ToString()或其等价物用于以文本方式表示任何对象。或者简单地说,它只是用于将任何对象转换为纯字符串格式。