首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Lambda检查对象数组上的null - ArgumentNullException

Lambda检查对象数组上的null - ArgumentNullException
EN

Stack Overflow用户
提问于 2018-06-02 23:22:36
回答 1查看 691关注 0票数 0

我正在尝试从UserBranches()数组中获取BranchCode字符串。对于特定用户,该列表为nothing,因此会导致异常:

System.ArgumentNullException:‘值不能为空。

参数名称: source‘

我使用的是一条IIF语句,但显然没有帮助:

代码语言:javascript
复制
Dim sMatchedBranches = IIf(Not IsNothing(oUser.UserBranches),
                           oUser.UserBranches.Select(Function(z) String.Format("{0} - BranchCode", z.BranchCode)), "")

我也使用了oUser.UserBranches.Any,但仍然是同样的例外。有什么想法吗?

**对于重复的建议,实际上不是因为问题将IIF和带有lambda表达式的空数组结合在一起。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-03 01:00:53

首先,我要重申@TnTinMn说过的话:试着摆脱对Microsoft.VisualBasic的依赖。挑选任何有用的东西都是可以的--在这种情况下,要非常周到和有意(例如,即使是C#的人也很喜欢InputBox!- What is the C# version of VB.net's InputDialog?)。然而,今天的VB有很多更好、更好的方法来完成任务。

ye olde IIf()的主要缺陷是它只是一个函数,这意味着无论条件如何,每个参数都会被执行。这使得它几乎没有什么用处,即使在VB6/VBA中也是如此,因为你无法避免任何运行时错误/异常,因为你知道每个条件都会发生。另一方面,If()是一个实际的运算符,它提供了每个人都想要的东西-一种在表达式中仔细修剪执行内容的方法,而不必编写专门的函数。

因此,简单的答案就是用If()替换IIf()并完成大部分工作:

代码语言:javascript
复制
Dim sMatchedBranches = If(Not IsNothing(oUser.UserBranches),
                       oUser.UserBranches.Select(Function(z) String.Format("{0} - BranchCode", z.BranchCode)), "")

人们可能会觉得这已经足够好了。但在VB中还有另外三个技巧可以让事情变得更好。

第一个是?运算符。除了使用?之外,这是表达类似If(oUser.UserBranches Is Nothing, Nothing, oUser.UserBranches.Select(Function(z) String.Format("{0} - BranchCode", z.BranchCode)))的东西的一种方便的方式:

代码语言:javascript
复制
oUser.UserBranches?.Select(Function(z) String.Format("{0} - BranchCode", z.BranchCode))

第二个技巧是字符串插值,格式为$"{myVar}"。而不是String.Format("{0} - BranchCode", z.BranchCode),现在可以是:

代码语言:javascript
复制
$"{z.BranchCode} - BranchCode"

第三个技巧是关于If()的:如果给它两个参数,它将提供一种处理Nothing的非常方便的方法。If(x,y)表示如果x不是Nothing,则返回x,否则返回y。(If(x,y)的含义与C#中的x ?? y相同。)

把所有这些放在一起:

代码语言:javascript
复制
Dim sMatchedBranches = If(oUser.UserBranches?.Select(Function(z) $"{z.BranchCode} - BranchCode"), "")
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50658370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档