gpt4 book ai didi

c# - C# 方法链可以是 "too long"吗?

转载 作者:IT王子 更新时间:2023-10-29 04:32:52 26 4
gpt4 key购买 nike

当然不是在可读性方面,因为您总是可以将单独的方法安排到单独的行中。相反,出于某种原因,将过多的方法链接在一起是否很危险?我主要使用方法链接来节省声明单个一次性变量的空间,并且传统上使用返回方法而不是修改调用者的方法。除了字符串方法,那些我有点毫不留情地链接起来。无论如何,有时我担心在一行中使用特别长的方法链的影响。

假设我需要根据某人的用户名更新一项的值。不幸的是,检索正确用户的最短方法如下所示。

SPWeb web = GetWorkflowWeb();
SPList list2 = web.Lists["Wars"];
SPListItem item2 = list2.GetItemById(3);
SPListItem item3 = item2.GetItemFromLookup("Armies", "Allied Army");
SPUser user2 = item2.GetSPUser("Commander");
SPUser user3 = user2.GetAssociate("Spouse");
string username2 = user3.Name;
item1["Contact"] = username2;

所有带有 2 或 3 的东西都只持续一次调用,所以我可以将其压缩如下(这也让我摆脱了可能是多余的 1):

SPWeb web = GetWorkflowWeb();
item["Contact"] = web.Lists["Armies"]
.GetItemById(3)
.GetItemFromLookup("Armies", "Allied Army")
.GetSPUser("Commander")
.GetAssociate("Spouse")
.Name;

无可否认,当它全部在一行中并且当您使用 int.Parse(ddlArmy.SelectedValue.CutBefore(";#", false)) 而不是 3。尽管如此,这是这些链条的平均长度之一,我可以很容易地预见到一些特别长的链条。除了可读性之外,对于这 10 多个方法链,还有什么我应该担心的吗?还是使用非常非常长的方法链没有坏处?

最佳答案

方法链的长度没有技术限制。

但是,三个可能成为问题的领域是调试异常处理资源处置

由于使链接如此优雅的同一事实使调试变得复杂 - 缺少中间临时变量。不幸的是,如果没有临时变量,调试时检查中间结果会变得很痛苦。

异常处理很复杂,因为您无法隔离从一种方法与另一种方法引发的异常。通常,如果您不能对异常做出有意义的响应,这不是问题 - 只需让它在调用链中向上传播即可。但是,如果您后来确实意识到需要异常处理,则必须重构链接语法才能插入适当的 try/catch 处理程序。

与异常处理类似的是确定性处置资源的情况。在 C# 中完成此操作的最简单方法是使用 using() - 遗憾的是,链接语法无法做到这一点。如果您正在调用返回一次性对象的方法,避免链接语法可能是个好主意,这样您就可以成为一名优秀的“代码公民”并尽早处理这些资源。

方法链接语法通常用于 fluent APIs ,它允许您的代码语法更接近地反射(reflect)您想要的操作顺序。 LINQ 是 .NET 中的一个示例,其中经常会看到流畅/链接语法。

关于c# - C# 方法链可以是 "too long"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2849193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com