4

哪种返回类型适用于由于其业务逻辑而可以成功完成或失败的方法?根据该返回类型,合适的命名约定是什么?

我的直觉是 bool 最适合简单的通过/失败。我已经研究并找到了推断特征的方法的约定——即 IsValid、HasFoo、ContainsBar 等。但这也是像 BuildHouse() 或 FlyKite() 这样的操作的正确命名,以清楚地表明操作是否成功?

我已经尝试了几种方法,但每次我都认为它看起来很奇怪,必须有更好的做法......

bool IsHouseBuilt()
bool TryBuildHouse()
void BuildHouse(out bool success)
PassFailEnum BuildHouse() //seems a little excessive

bool IsKiteFlying()
bool TryFlyKite()
void FlyKite(out bool success)
PassFailEnum FlyKite() 
4

6 回答 6

4

.NET 中试图将某些内容解析为其他内容(例如int.TryParse)的所有内置方法都被调用TryParse并返回一个bool和一个out参数。

所以也许:

public static bool TryBuildHouse(T input, out House house)
于 2013-08-02T20:54:35.477 回答
1

TryBuildHouse 似乎是您的示例中最正确的。

于 2013-08-02T20:53:34.487 回答
1

尝试返回值的方法通常接受的格式是:

bool TryBuildHouse(out object thing);

尝试成功做某事的没有参数的方法通常接受的格式是你想要的任何东西,真的......有些人更喜欢Try前缀,因为它通常意味着它可能不会成功,但我喜欢认为bool返回类型也意味着它可能不会成功。各有各的。

如果构建失败是灾难性的(它绝对应该一直成功),你应该考虑一个 void 方法,在罕见的失败实例中抛出一个适当的异常,然后根据你的独特捕获或不捕获它情境和环境要求。

于 2013-08-02T20:54:50.577 回答
0

您应该考虑构建一个类来表示系统中任何类型的调用所需的信息,例如:

public class ActionResult
{
    public bool Success { get; set; }
    public List<string> Errors { get; }

    public ActionResult()
    {
        // Initialize whatever you want here
        Errors = new List<string>();
    }
}

然后,当您的方法中发生“坏”或“意外”事情时,您可以ActionResult使用可能对调用者有用的错误信息填充返回类型。

在您的示例中,您将像这样使用它:

ActionResult BuildHouse()
{

}
于 2013-08-02T20:56:17.860 回答
0

我会建议TryParse,但您还没有说明该方法是否实际上也返回了一个对象。按照惯例,TryParse会建议有一个输出。如果您查看该HashSet.Add方法,它会在成功时返回布尔值,但不会返回实际out值。

因此,从你的情况来看,我会选择类似的东西

/// <summary>
/// Builds a house
/// </summary>
/// <returns>true if house was built; false if house failed to build</returns>
public bool BuildHouse();

并记录它返回成功/失败布尔值的事实。如果您打算返回一个对象,例如房子,那么该TryParse选项将是有意义的,并且您的方法将有一个out参数来保存新创建的对象。

于 2013-08-02T20:58:04.367 回答
0

很多可能性。我没有看到提到的一个是 BuildHouse() 如果成功则返回 House 对象,如果失败则返回 null 。

于 2013-08-02T21:04:15.513 回答