【发布时间】:2020-02-26 15:19:00
【问题描述】:
如何使用 AddRange 函数设置 Listviewitem 是否检查 True/False?
Try
_lsv.SuspendLayout()
_lsv.Items.AddRange((From itm In _desrz.Select(
Function(x) New ListViewItem(New String() {
x.FolderName,
x.FolderPath}
))).ToArray)
Catch ex As Exception
Throw ex
Finally
_lsv.ResumeLayout() : _lsv.Update() : _lsv.Refresh()
End Try
_desrz 是一个具有 3 个属性的文件夹对象:FolderPath、FolderName 和 FolderChecked。我可以将FolderPath 和FolderName 添加到列表视图中,但我无法将检查属性值设置为真/假?
【问题讨论】:
-
永远不要在
Catch块中使用Throw ex。如果你想重新抛出异常,那么只需使用Throw。也就是说,如果您要做的只是重新抛出异常,那么您有什么Catch块呢?如果你有一个Finally块,你就不需要一个,所以如果你有一个目的,就只需要一个。 -
当然可以。您需要重新抛出异常的唯一原因是您首先捕获了它。正如我已经说过的,根本不要抓住它,那么你就不需要重新抛出它。完全摆脱
Catch块。如果你真的必须包含一个无用的Catch块,至少要正确地重新抛出并且只使用Throw而不是Throw ex。 -
补充@jmcilhinney 所说的,
Try ... Catch ex ... Throw ex和Try ... Catch... Throw不相同。Throw ex将重置堆栈跟踪,因此当捕获到这个新异常时,堆栈跟踪将只回溯到Throw ex点。使用Throw将保留堆栈跟踪。然而,你永远不应该使用Catch .. Throw,除非你之前已经处理了一个明确的异常类型,比如Try ... Catch ex As SpecificExceptionType ... Catch ... Throw。请参阅this answer 了解更多信息。 -
啊啊啊!!明白了,谢谢我把 throw ex 改成 throw ..apreciate
-
除非你根本不需要 catch 如果你只是想扔掉它而不做任何其他事情。
Throw和Throw ex在这里都不是一个好主意。
标签: .net vb.net linq listview windows-forms-designer