diff --git a/src/System.Management.Automation/engine/LanguagePrimitives.cs b/src/System.Management.Automation/engine/LanguagePrimitives.cs index 27aa00c00..9892dfc36 100644 --- a/src/System.Management.Automation/engine/LanguagePrimitives.cs +++ b/src/System.Management.Automation/engine/LanguagePrimitives.cs @@ -476,12 +476,10 @@ namespace System.Management.Automation return null; } -#if !CORECLR private static IEnumerable DataTableEnumerable(object obj) { return (((DataTable)obj).Rows); } -#endif private static IEnumerable TypicalEnumerable(object obj) { @@ -517,12 +515,10 @@ namespace System.Management.Automation private static GetEnumerableDelegate CalculateGetEnumerable(Type objectType) { -#if !CORECLR if (typeof(DataTable).IsAssignableFrom(objectType)) { return LanguagePrimitives.DataTableEnumerable; } -#endif // Don't treat IDictionary or XmlNode as enumerable... if (typeof(IEnumerable).IsAssignableFrom(objectType) diff --git a/test/powershell/engine/Api/LanguagePrimitive.Tests.ps1 b/test/powershell/engine/Api/LanguagePrimitive.Tests.ps1 index 1108b1664..7b34e9174 100644 --- a/test/powershell/engine/Api/LanguagePrimitive.Tests.ps1 +++ b/test/powershell/engine/Api/LanguagePrimitive.Tests.ps1 @@ -32,4 +32,18 @@ Describe "Language Primitive Tests" -Tags "CI" { $a[0] = $a = [PSObject](,1) [System.Management.Automation.LanguagePrimitives]::IsTrue($a) | Should -BeTrue } + + It "LanguagePrimitives.GetEnumerable should treat 'DataTable' as Enumerable" { + $dt = [System.Data.DataTable]::new("test") + $dt.Columns.Add("Name", [string]) > $null + $dt.Columns.Add("Age", [string]) > $null + $dr = $dt.NewRow(); $dr["Name"] = "John"; $dr["Age"] = "20" + $dr2 = $dt.NewRow(); $dr["Name"] = "Susan"; $dr["Age"] = "25" + $dt.Rows.Add($dr); $dt.Rows.Add($dr2) + + [System.Management.Automation.LanguagePrimitives]::IsObjectEnumerable($dt) | Should -BeTrue + $count = 0 + [System.Management.Automation.LanguagePrimitives]::GetEnumerable($dt) | ForEach-Object { $count++ } + $count | Should -Be 2 + } }