C#中ToString()的需要是什么?
我在c语言中使用下面的代码。但是这两个WriteLine语句给出的结果是相同的。那么在c语言中转换成字符串需要什么呢?有什么特殊用途吗C#中ToString()的需要是什么?,c#,C#,我在c语言中使用下面的代码。但是这两个WriteLine语句给出的结果是相同的。那么在c语言中转换成字符串需要什么呢?有什么特殊用途吗 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace sample { class Program { static void Main(strin
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();
}
}
}
任何对象的属性都应该返回该对象的字符串表示形式。在代码中
在Int32中,它返回与对象对应的字符串(整数的值)
如果我理解你的问题,
ToString()
的目的是提供一种一致的机制来将对象转换为字符串。在您的控制台中。WriteLine(值)代码>示例您使用的是一个重载版本的WriteLine
,它接受int
,但在使用对象的一般情况下,系统需要一种提供文本表示的机制。您可能知道Tostring()
返回一个表示当前对象的字符串。没错,两行(带和不带Tostring()
)都会返回相同的结果,因为即使不使用Tostring()
,也会有一个隐式调用,因为控制台。writeline()
打印字符串表示
阅读有关的更多信息,您应该在类中重写ToString
,以提供所需的字符串表示形式。Console.WriteLine
方法调用ToString
,根据:
否则,将调用值的ToString
方法来生成其
字符串表示,并将结果字符串写入
标准输出流
以这门课为例:
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.NET在将对象传递给WriteLine时隐式调用ToString方法。在编程语言中,ToString()或其等价物用于以文本形式表示任何对象。或者可以简单地说,它只是用于将任何对象转换为纯字符串格式。添加更多信息,如果您反编译程序,您可以找到
Console.WriteLine(value.ToString())
上面的电话会打过来
/**Methods are from mscorlib.dll**/
public virtual void Write(string value)
{
if (value != null)
{
this.Write(value.ToCharArray());
}
}
public virtual void Write(int value)
{
this.Write(value.ToString(this.FormatProvider));
}
而
控制台写入线(值)
上面的电话会打过来
/**Methods are from mscorlib.dll**/
public virtual void Write(string value)
{
if (value != null)
{
this.Write(value.ToCharArray());
}
}
public virtual void Write(int value)
{
this.Write(value.ToString(this.FormatProvider));
}
如果您想知道强制转换是如何进行的(ToString),那么这可能会对您有所帮助。您能详细说明一下吗?更具体地说,在调用Console.WriteLine或String.Format时,ToString调用是隐式的。Console.WriteLine(25)
转到一个重载WriteLine
,该重载接受一个int
。这可能是因为这个重载将使用ToString
,但是C语言和编译器对那里的任何东西都不做任何假设。在案例Console.WriteLine中(“hello”+25)
规范要求连接+
来调用(25);然后使用另一个重载的WriteLine
。-1隐式?这听起来像是编译器的诡计(可能与隐式关键字关联)。实际上,这种情况是由重载提供的,就这么简单。@weston我试图回答C#中ToString()的需要是什么?好的,删除-1。但在我看来,这个问题似乎是“既然我可以忽略它,那么toString的目的是什么?”与上面的value
一样,string str1=value代码>将在编译时给出错误,而字符串str2=value.ToString()代码>正常。因此,不能在所有情况下都忽略ToString()
。方法Console.WriteLine
有许多重载,包括一个接受int
的重载,这就解释了为什么在您的示例中可以忽略ToString()
。