那么我怎么知道具有对象返回类型的方法会发生什么。 例如:
START:M
此方法被标记为返回对象的方法。但在其中你可以看到它返回一个字符串文字。 IntelliSense甚至不会显示它返回字符串它只知道该方法正在返回一个对象。在这种情况下你做了什么?
字符串文字来自哪里?它们来自System.Object还是来自" System.String"?因为返回System.Object没有的东西似乎不合逻辑。 (在这种情况下为字符串文字)
答案 0 :(得分:2)
当方法返回object
时,您无法对返回值的类型做出任何假设。即使您知道当前实现返回string
,也无法在没有强制转换的情况下在返回结果上调用string
方法。
如果你想对作为对象返回的字符串进行操作,请在检查后强制转换它们,比如
object obj = ReturnSth();
string str = obj as string;
if (str != null) {
Console.WriteLine(str.Length);
}
在C#7中,您还可以在类型上使用模式匹配:
switch (ReturnSth()) {
case string str:
Console.WriteLine(str.Length);
break;
...
}
答案 1 :(得分:1)
我如何知道具有对象返回类型的方法会发生什么。
您希望它返回类型object
以及类型提供的。
这是"表面合同"您定义的返回值。
在您的情况下,这意味着您无法使用任何string
特定的返回值方法,而无需明确的向下转发。
答案 2 :(得分:0)
您是否尝试过在Visual Studio中编写代码? IDE会在编译时为您提供错误。