Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中ToString()的需要是什么?_C# - Fatal编程技术网

C#中ToString()的需要是什么?

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

我在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(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()