【问题标题】:Force function to return value and make compile error C#强制函数返回值并使编译错误 C#
【发布时间】:2014-11-10 21:09:31
【问题描述】:

我在该类中有一个类和一个方法。但是,此类方法返回一个字符串。当我调用类方法时,即使我没有捕获字符串值返回,我也不会收到错误消息。有没有一种方法可以让 C# 和 .net 在返回值时强制我捕获该值。 这是我的意思的一个例子。

1- 创建一个类测试。

class test
    {

        public string mystring() {

            return "BLAH";

        }
    }

2-从程序或其他类中调用类方法

test mystring = new test();
mystring.mystring();

我在 Visual Studio 中工作时的编译器不会抱怨我没有捕获返回值。 这是正常的还是我错过了什么。我可以强制编译器通知我该函数返回一个值但我没有捕捉到它吗?

提前感谢您提出的任何建议。

【问题讨论】:

  • 你的意思是强迫它做类似string a = mystring.mystring();的事情?
  • 这正是我的意思。
  • @Miguel 为什么要强制调用者对返回值做一些事情?
  • 我很困惑...您没有收到错误,因为您在方法中有 return 语句。

标签: c# .net


【解决方案1】:

您可以将其转换为属性而不是方法:

  public string myString
  {
    get
    {
      return "Blah";
    }
  }

那么如果只是调用属性就无法编译:

myString.myString; //Results in "Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement" Error

【讨论】:

  • 我不明白你的意思是什么狗鼻子?如果您尝试在这种情况下执行mystring.mystring;(请注意没有 (),因为它现在是属性而不是方法)将无法编译。
  • @dognose:编译器不能强制你对返回值进行操作。这属于计算理论。计算机不能做的事情有 9 种。 (不要让我列出它们,我的计算机理论课已经有 20 年了。)但可以说编译器无法知道您正在对返回值进行任何有效的使用。
  • 但是,如果我需要该方法来执行诸如计算某些值然后返回“BLAH”之类的操作,我还能获得一个属性吗?
  • @Miguel,简而言之:是的。但是,通常您只想在属性中执行“快速”操作。请参阅here 了解更多信息
  • @Miguel,你也可以让一个属性返回一个方法,所以 string mystring{ get { return test(); }} ..... test(){ return "test";} 调用 mystring 会给你“测试”,你必须使用它.
【解决方案2】:

总之,没有。不是靠武力。

不捕获返回值是司空见惯的。核心库中的示例比比皆是(例如,向Hashset<T> 添加元素,该函数实际上返回bool 以标记它是否实际添加或是否已经存在 - 取决于个人实现,我可能关心也可能不关心)。

当然,你总是可以每次只做string str = MyFunction() 这样的事情,然后永远不要使用str,但我想你可能已经知道了。

【讨论】:

    【解决方案3】:

    您可以尝试将警告作为错误打开,方法是在解决方案资源管理器中右键单击项目,单击“属性”,转到“构建”选项卡并将将警告视为错误设置为全部。这将强制您在构建之前解决所有警告,并将捕获一些您没有分配的场景。

    编译器不知道你的方法的唯一目的是返回字符串,或者它是否做了一些影响状态的工作,所以当你不将结果分配给任何东西时它不会抱怨。

    但是,您可以根据 MikeH 的回答将其设置为仅获取属性。当你没有将它分配给任何东西时,这会报错。

    【讨论】:

      【解决方案4】:

      如果您的函数有副作用,那么您应该创建未使用的变量并捕获值。发布选项的编译器删除此变量。

      但如果你在功能上没有副作用:你可以使用Visual Studio工具,例如“观察窗口”和“立即窗口”

      【讨论】:

        猜你喜欢
        • 2020-02-11
        • 2011-08-13
        • 2015-12-28
        • 2011-12-13
        • 2010-09-18
        • 2023-03-08
        • 1970-01-01
        • 2013-01-16
        • 1970-01-01
        相关资源
        最近更新 更多