c# - 使用 goto 的最佳实践

标签 c# .net goto

在这段代码中使用goto是否正确?有没有其他选择?

return ExecuteReader(cmd, reader =>
{
    List<BEPartnership> partnerhip = null;

    //Partnership
    if (!((SqlDataReader) reader).HasRows)
        goto exit;

    partnerhip = 
        new List<BEPartnership>{new BEPartnership().GetFromReader(reader)};

    //Customers
    if (!reader.NextResult() && !((SqlDataReader) reader).HasRows)
        goto exit;

    foreach (BEPartnership p in partnerhip)
        p.Partner = new BECustomer().GetFromReader(reader);

    //Contracts
    if (!reader.NextResult() && !((SqlDataReader) reader).HasRows)
        goto exit;

    List<BEContractB2B> contracts = new List<BEContractB2B>();
    contracts.Add(new BEContractB2B().GetFromReader(reader));
    // contracts = new BEContractB2B().GetFromReader2(reader).ToList();

    exit:
    return partnerhip;
});

最佳答案

如果您希望返回当前填充的列表,您可以将每个 goto exit; 替换为 return null;return partnerhip;。 (我假设合作伙伴是很酷的合作伙伴?)

关于c# - 使用 goto 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5485029/

相关文章:

.net - F#中的组合谓词

c - 标签声明和标签值什么时候有意义?

c - 使用 goto 语句强制执行至少一次 for 循环迭代的有效性

c# - 将 ResourceDictionary 复制到 C# 中的字典

c# - 使用 WinSCP .NET 程序集从 FTP 服务器下载除特定文件夹之外的所有文件

c# - 需要保护 WCF 数据,但只是一个部分

.net - 使用 MultiBinding 时将枚举值作为命令参数传递

c# - 在 webbrowser 控件中执行 javascript

.net - Windsor - 从容器中拉出 transient 对象

algorithm - 在没有循环或 if 语句的情况下执行循环 x 次