Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.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# C“如果返回类型为”我如何知道方法返回什么;对象";?_C#_Object - Fatal编程技术网

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次后添加评论。