PowerShell 5.1中单元素数组转List<int>报错问题咨询
PowerShell 5.1中
[List[int]](@(1))报错的原因 在PowerShell 5.1里,只有最后一条语句报错,核心是单元素数组的参数解析逻辑存在差异,具体拆解如下:
$a = [List[int]](1, 2)和$b = [List[int]](@(1, 2)):
不管是直接传递多个int值,还是传递多元素的Object[]数组,PowerShell都会将其识别为IEnumerable类型,匹配List<T>的List(IEnumerable<T>)构造函数,顺利将数组中的int元素填充到列表中,因此执行正常。$c = [List[int]](1):
传递单个int值时,PowerShell会自动将其视为单元素的可枚举集合处理,或者直接通过构造逻辑创建包含该元素的列表,因此执行成功。$d = [List[int]](@(1)):
这里的@(1)是单元素的Object[]数组,PowerShell 5.1不会将其识别为IEnumerable,反而会把整个数组当作单个参数传递给构造函数。此时它会尝试匹配List<T>的List(int capacity)构造函数,但Object[]类型无法转换为int类型,于是抛出类型转换错误。
PowerShell Core优化了参数解析逻辑,会正确将单元素数组识别为IEnumerable类型,匹配对应的构造函数,因此不会出现该异常。
内容的提问来源于stack exchange,提问作者Polshgiant
相关产品推荐
相关产品推荐

