C# C“如果返回类型为”我如何知道方法返回什么;对象";?
那么,我如何知道从具有对象返回类型的方法中期望得到什么呢。 例如:C# C“如果返回类型为”我如何知道方法返回什么;对象";?,c#,object,C#,Object,那么,我如何知道从具有对象返回类型的方法中期望得到什么呢。 例如: static object ReturnSth() { return "Some random text"; } 此方法被标记为返回对象的方法。但在它内部,您可以看到它返回一个字符串文本。IntelliSense甚至不会显示它返回字符串,它只知道该方法正在返回一个对象。在这种情况下你怎么办 此外,字符串文字从何而来?它们是来自System.Object还是来自“System.String”?因
static object ReturnSth()
{
return "Some random text";
}
此方法被标记为返回对象的方法。但在它内部,您可以看到它返回一个字符串文本。IntelliSense甚至不会显示它返回字符串,它只知道该方法正在返回一个对象。在这种情况下你怎么办
此外,字符串文字从何而来?它们是来自System.Object还是来自“System.String”?因为返回System.Object没有的东西似乎不合逻辑。(本例中的字符串文字)当方法返回
对象时,不能对返回值的类型进行任何假设。即使您知道当前实现返回一个string
,也不能在没有强制转换的情况下对返回结果调用string
s方法
如果要对作为对象返回的字符串进行操作,请在检查后强制转换它们,如下所示
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;
...
}
你试过自己在VisualStudio中编写吗?IDE会在编译时向您提供一个错误。C#不是我最好的语言,我更喜欢Java,但这是一个面向对象的问题。
在面向对象语言中,所有的东西都是对象,所以所有的东西都扩展了对象当你说你的方法返回一个对象时,这个方法可以返回任何扩展了od对象的东西,所以你的方法可以返回任何东西,调用你的方法的人不知道这到底是什么,它们可能会将返回强制转换为其他类,如字符串或数字,这种方法类似于代码气味,因为在运行时可能会出现强制转换错误,更好的方法是准确声明方法应返回的内容
我如何知道从具有对象返回类型的方法中期望得到什么
您希望它返回类型对象
以及该类型提供的任何内容
这是您定义的返回值的“表面契约”
在您的情况下,这意味着您将无法在没有显式向下转换的情况下使用任何特定于字符串的返回值方法。您可以使用Object.GetType Method()
,但是字符串文字是否在System.Object中定义?如果我能够毫无问题地返回字符串文字,我认为它们是正确的。这不是答案。您可以在点击50次后添加评论。