- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
当然不是在可读性方面,因为您总是可以将单独的方法安排到单独的行中。相反,出于某种原因,将过多的方法链接在一起是否很危险?我主要使用方法链接来节省声明单个一次性变量的空间,并且传统上使用返回方法而不是修改调用者的方法。除了字符串方法,那些我有点毫不留情地链接起来。无论如何,有时我担心在一行中使用特别长的方法链的影响。
假设我需要根据某人的用户名更新一项的值。不幸的是,检索正确用户的最短方法如下所示。
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/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!