假设我们有以下代码。
var foo = "I am a string";
Object obj = foo;
var bar = obj.ToString();
实际发生了什么?
女巫更好吗?
var bar = obj.ToString();
var bar = (string)obj;
答案 0 :(得分:2)
ToString是Object类中定义的方法,然后在整个框架中的每个类中继承。
String类中的ToString方法已被一个只返回自身的实现覆盖。因此,在String-object上调用ToString()没有任何开销。
所以,我不认为有什么值得担心的。
另外,我会选择第一个选项。它更具可读性,你应该总是得到一个结果,无论什么类型" obj"是。
答案 1 :(得分: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;
}
覆盖只返回this
。
2)我只会使用var bar = foo;
代替演员或.ToString()
。如果您只有一个对象,则首选是.ToString()
。
答案 2 :(得分:0)
实际发生了什么?
您的代码实际上可能是这样的
var foo = new String("I am a string".ToCharArray());
Object obj = foo;
var bar = obj.ToString();
C#string
关键字是String
类的别名。
您调用的ToString
方法只使用多态机制来调用正确的ToString
实现。您可能知道string
是引用类型和Object
女巫更好吗?
来自this回答。
这两个用于不同目的。 ToString方法 任何对象都应该返回该字符串的表示形式 宾语。投射是完全不同的,'as'关键词执行 有条件的演员,如前所述。 'as'关键词基本上是说 “如果那个对象是这个,请给我一个这种类型的引用 输入“ToString说”给我一个字符串表示 对象“。在某些情况下结果可能相同但两者应该相同 从来没有被认为可以互换,因为正如我所说,它们的存在 不同的目的。如果你的意图是施展那么你应该 总是使用强制转换,而不是ToString。