【问题标题】:Is there a way to ensure a value returned from a c# method is assigned to a variable? [duplicate]有没有办法确保从 c# 方法返回的值分配给变量? [复制]
【发布时间】:2020-05-14 09:59:17
【问题描述】:

我正在编写调用第三方 Web API 的代码。 Web 响应很重要,因为它包含有关是否插入记录的详细信息。 API 返回表示已创建对象的 JSON。其他插入需要返回的 ID,例如地址的 id 是插入员工之前需要的外键。如果不保留返回值以供以后使用,则可能难以跟踪插入的地址。

是否可以注释或以其他方式编写方法以便必须分配返回值?这意味着如果不分配其他变量就无法调用该方法,因此您不会意外丢失响应。

例如

[MustAssignReturnResult]
public string InsertRecord(string json)
{
    return "{json representing result}";
}

如果没有分配,我希望编译器失败。

//this is ok
string result = InsertRecord(json);

//valid under normal circumstances
InsertRecord(json); //but should give a compiler error because result is not assigned.

【问题讨论】:

  • 为什么?如果返回的信息对以后的使用很重要,那么编写代码的人都会弄清楚并存储它。我不确定编译器强制执行此操作(目前想不出办法)是否有用或一个好主意。
  • 不要这样做。时期。 “返回的 ID 是其他插入所必需的” - 通常的程序员会弄清楚。您无需强制执行任何操作。
  • @InBetween 我认为在这种情况下有助于防止用户用垃圾填充第三方数据库。例如。插入没有员工的地址。不幸的是,第 3 方 API 在地址创建后很难搜索,即您必须知道插入记录的 ID。我不能阻止用户只插入地址,但如果他们看起来做错了,我可以通过某种方式使代码发出警告或错误。

标签: c# compiler-errors return-value


【解决方案1】:

不,您不能强制分配返回值。

但是,您可以将返回值移动到 out 参数,这样调用者就必须声明一个变量:

public void InsertRecord(string json, out string result)
{
    result = "{json representing result}";
}

现在调用者必须说:

InsertRecord(json, out var result);

但是,您无法使用丢弃变量_ 来阻止调用者以忽略结果:

InsertRecord(json, out var _);

【讨论】:

  • 这有帮助,但可以与 Resharper 建议结合使用。这样做的重点是该方法具有外部副作用(将记录插入数据库),我想尝试鼓励正确使用,而不假设人们从头到尾阅读文档。
  • @sbmobile - 当然可以,但是如果有人不使用 Resharper,则依赖 Resharper 将无济于事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 2012-06-02
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多