我想测试一个对象是否是一个字符串或任何类型的数组或列表(不是哈希表或字典等)似乎不可能测试. NET中的每一种类型的集合。我试过这样的东西:
($list -is [Collections.IEnumerable]) -and ($list -isnot [Collections.IDictionary])
字符串但堆栈或队列在该测试中将返回true。
kmbjn2e31#
从技术上讲,hashtable和其他字典类型都是集合。Queue和Stack也是集合,它们实现了ICollection interafce。在这种情况下,如果我理解正确的话,你可以定位的接口是IList。array,ArrayList,List<T>和其他 * 集合类型 * 都有这个接口:
hashtable
Queue
Stack
ICollection
IList
array
ArrayList
List<T>
$instancesToTest = ( @(), @{}, [ordered]@{}, [System.Collections.ObjectModel.Collection[string]]::new(), [System.Management.Automation.PSDataCollection[string]]::new(), [System.Collections.Generic.List[string]]::new(), [System.Collections.Generic.Dictionary[string, string]]::new(), [System.Collections.Generic.Queue[string]]::new(), [System.Collections.Generic.Stack[string]]::new(), [System.Collections.Stack]::new(), [System.Collections.Queue]::new(), [System.Collections.ArrayList]::new() ) $instancesToTest | ForEach-Object { [pscustomobject]@{ Type = $_.GetType() IsIList = $_ -is [System.Collections.IList] } } | Sort-Object IsIList -Descending
字符串还有一个很棒的模块,叫做ClassExplorer,可以用来查找实现这个接口的所有类型:
Find-Type -ImplementsInterface System.Collections.IList
型
1条答案
按热度按时间kmbjn2e31#
从技术上讲,
hashtable
和其他字典类型都是集合。Queue
和Stack
也是集合,它们实现了ICollection
interafce。在这种情况下,如果我理解正确的话,你可以定位的接口是
IList
。array
,ArrayList
,List<T>
和其他 * 集合类型 * 都有这个接口:字符串
还有一个很棒的模块,叫做ClassExplorer,可以用来查找实现这个接口的所有类型:
型