当实际类型为String时,调用Object.ToString时会发生什么

Pan*_*fas 6 .net c#

让我们说我们有下面的代码.

var foo = "I am a string";
Object obj = foo;
var bar = obj.ToString();
Run Code Online (Sandbox Code Playgroud)

究竟发生了什么?

  1. 将obj转换为字符串,然后调用ToString方法?
  2. 在obj上调用ToString方法,这是没有强制转换的字符串的覆盖?
  3. 别的什么?

巫婆一个人更好吗?

  1. var bar = obj.ToString();
  2. var bar = (string)obj;

bri*_*ght 2

1) 来自https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/String.cs的开源 dotnet 源:

// Returns this string.
public override String ToString() {
    Contract.Ensures(Contract.Result<String>() != null);
    Contract.EndContractBlock();
    return this;
}
Run Code Online (Sandbox Code Playgroud)

覆盖只会返回this

2)我只想使用var bar = foo;而不是演员或.ToString(). 如果您只有一个对象,那么.ToString()首选是。