[{"data":1,"prerenderedAt":321},["ShallowReactive",2],{"blog:2008:using-linq-to-foreach-over-an-enum-in-c":3,"blogMore-Development":307,"comments-using-linq-to-foreach-over-an-enum-in-c":320},{"id":4,"title":5,"body":6,"category":289,"commentCount":270,"date":290,"description":291,"excerpt":292,"extension":293,"filenames":294,"hidden":295,"image":294,"meta":296,"minutes":158,"navigation":175,"path":297,"seo":298,"showCategory":294,"stem":299,"tags":300,"updated":294,"url":304,"wordCount":305,"__hash__":306},"content\u002Fblog\u002F2008\u002Fusing-linq-to-foreach-over-an-enum-in-c.md","Using LINQ to foreach over an enum in C#",{"type":7,"value":8,"toc":287},"minimark",[9,22,25,28,93,96,126,129,274,277,283],[10,11,12],"blockquote",{},[13,14,15,16,21],"p",{},"I later expanded this out into ",[17,18,20],"a",{"href":19},"\u002Fblog\u002F2010\u002Fenums-better-syntax-improved-performance-and-tryparse-in-net-3-5\u002F","a full Enum\u003CT> strongly typed helper",".",[13,23,24],{},"I can’t be the only person in the world who wants to foreach over the values of an enum otherwise Enum.GetValues(Type enumType) wouldn’t exist in the framework. Unfortunately it didn’t get any generics love in .NET 2.0 and unhelpfully returns an array.",[13,26,27],{},"Thanks to the power of LINQ you can do this:",[29,30,35],"pre",{"className":31,"code":32,"language":33,"meta":34,"style":34},"language-csharp shiki shiki-themes everforest-light dracula","foreach(var customerType in Enum.GetValues(typeof(CustomerTypes)).Cast\u003CCustomerTypes>()))\n","csharp","",[36,37,38],"code",{"__ignoreMap":34},[39,40,43,47,51,55,58,61,64,68,70,73,75,79,82,85,88,90],"span",{"class":41,"line":42},"line",1,[39,44,46],{"class":45},"smiwp","foreach",[39,48,50],{"class":49},"s6Vpi","(",[39,52,54],{"class":53},"sXAHl","var",[39,56,57],{"class":49}," customerType ",[39,59,60],{"class":45},"in",[39,62,63],{"class":49}," Enum.",[39,65,67],{"class":66},"sS4Kt","GetValues",[39,69,50],{"class":49},[39,71,72],{"class":45},"typeof",[39,74,50],{"class":49},[39,76,78],{"class":77},"snuxY","CustomerTypes",[39,80,81],{"class":49},")).",[39,83,84],{"class":66},"Cast",[39,86,87],{"class":49},"\u003C",[39,89,78],{"class":77},[39,91,92],{"class":49},">()))\n",[13,94,95],{},"That is okay, but this is more concise:",[29,97,99],{"className":31,"code":98,"language":33,"meta":34,"style":34},"foreach(CustomerTypes customerType in Enums.Get\u003CCustomerTypes>())\n",[36,100,101],{"__ignoreMap":34},[39,102,103,105,107,109,111,113,116,119,121,123],{"class":41,"line":42},[39,104,46],{"class":45},[39,106,50],{"class":49},[39,108,78],{"class":77},[39,110,57],{"class":49},[39,112,60],{"class":45},[39,114,115],{"class":49}," Enums.",[39,117,118],{"class":66},"Get",[39,120,87],{"class":49},[39,122,78],{"class":77},[39,124,125],{"class":49},">())\n",[13,127,128],{},"The tiny class to achieve that is, of course:",[29,130,132],{"className":31,"code":131,"language":33,"meta":34,"style":34},"using System.Collections.Generic;\nusing System.Linq;\n\npublic static class Enums {\n  public static IEnumerable\u003CT> Get\u003CT>() {\n    return System.Enum.GetValues(typeof(T)).Cast\u003CT>();\n  }\n}\n",[36,133,134,156,170,177,197,226,262,268],{"__ignoreMap":34},[39,135,136,139,143,145,148,150,153],{"class":41,"line":42},[39,137,138],{"class":45},"using",[39,140,142],{"class":141},"sjYfO"," System",[39,144,21],{"class":49},[39,146,147],{"class":141},"Collections",[39,149,21],{"class":49},[39,151,152],{"class":141},"Generic",[39,154,155],{"class":49},";\n",[39,157,159,161,163,165,168],{"class":41,"line":158},2,[39,160,138],{"class":45},[39,162,142],{"class":141},[39,164,21],{"class":49},[39,166,167],{"class":141},"Linq",[39,169,155],{"class":49},[39,171,173],{"class":41,"line":172},3,[39,174,176],{"emptyLinePlaceholder":175},true,"\n",[39,178,180,184,187,190,194],{"class":41,"line":179},4,[39,181,183],{"class":182},"s9HRq","public",[39,185,186],{"class":182}," static",[39,188,189],{"class":45}," class",[39,191,193],{"class":192},"sPLAf"," Enums",[39,195,196],{"class":49}," {\n",[39,198,200,203,205,208,210,213,216,218,220,223],{"class":41,"line":199},5,[39,201,202],{"class":182},"  public",[39,204,186],{"class":182},[39,206,207],{"class":77}," IEnumerable",[39,209,87],{"class":49},[39,211,212],{"class":77},"T",[39,214,215],{"class":49},"> ",[39,217,118],{"class":66},[39,219,87],{"class":49},[39,221,212],{"class":222},"sAO9U",[39,224,225],{"class":49},">() {\n",[39,227,229,232,235,239,241,243,245,247,249,251,253,255,257,259],{"class":41,"line":228},6,[39,230,231],{"class":45},"    return",[39,233,234],{"class":49}," System.",[39,236,238],{"class":237},"sSKRk","Enum",[39,240,21],{"class":49},[39,242,67],{"class":66},[39,244,50],{"class":49},[39,246,72],{"class":45},[39,248,50],{"class":49},[39,250,212],{"class":77},[39,252,81],{"class":49},[39,254,84],{"class":66},[39,256,87],{"class":49},[39,258,212],{"class":77},[39,260,261],{"class":49},">();\n",[39,263,265],{"class":41,"line":264},7,[39,266,267],{"class":49},"  }\n",[39,269,271],{"class":41,"line":270},8,[39,272,273],{"class":49},"}\n",[13,275,276],{},"Great.",[13,278,279],{},[280,281,282],"em",{},"[)amien",[284,285,286],"style",{},"html pre.shiki code .smiwp, html code.shiki .smiwp{--shiki-default:#F85552;--shiki-dark:#FF79C6}html pre.shiki code .s6Vpi, html code.shiki .s6Vpi{--shiki-default:#5C6A72;--shiki-dark:#F8F8F2}html pre.shiki code .sXAHl, html code.shiki .sXAHl{--shiki-default:#3A94C5;--shiki-dark:#FF79C6}html pre.shiki code .sS4Kt, html code.shiki .sS4Kt{--shiki-default:#8DA101;--shiki-dark:#50FA7B}html pre.shiki code .snuxY, html code.shiki .snuxY{--shiki-default:#3A94C5;--shiki-default-font-style:inherit;--shiki-dark:#8BE9FD;--shiki-dark-font-style:italic}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sjYfO, html code.shiki .sjYfO{--shiki-default:#DF69BA;--shiki-default-font-style:inherit;--shiki-dark:#8BE9FD;--shiki-dark-font-style:italic}html pre.shiki code .s9HRq, html code.shiki .s9HRq{--shiki-default:#F57D26;--shiki-dark:#FF79C6}html pre.shiki code .sPLAf, html code.shiki .sPLAf{--shiki-default:#3A94C5;--shiki-dark:#8BE9FD}html pre.shiki code .sAO9U, html code.shiki .sAO9U{--shiki-default:#3A94C5;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic}html pre.shiki code .sSKRk, html code.shiki .sSKRk{--shiki-default:#35A77C;--shiki-dark:#F8F8F2}",{"title":34,"searchDepth":158,"depth":158,"links":288},[],"Development","2008-04-10T15:35:15+00:00","A tiny LINQ-powered helper that lets you foreach over enum values in C# without the verbose `Enum.GetValues(typeof(X)).Cast\u003CX>()` incantation.","[object Object]","md",null,false,{},"\u002Fblog\u002F2008\u002Fusing-linq-to-foreach-over-an-enum-in-c",{"title":5,"description":291},"blog\u002F2008\u002Fusing-linq-to-foreach-over-an-enum-in-c",[301,302,303],".NET","C#","LINQ","\u002Fblog\u002F2008\u002Fusing-linq-to-foreach-over-an-enum-in-c\u002F",249,"WEtgzXRtR2L5HPTKeJ7vLaBZgvmsy33jsJ_HV97gve0",[308,312,316],{"title":309,"date":310,"url":311},"Transactions in the MongoDB EF Core Provider","2025-10-25","\u002Fblog\u002F2025\u002Fmongodb-explicit-transactions\u002F",{"title":313,"date":314,"url":315},"Queryable Encryption with the MongoDB EF Core Provider","2025-09-22","\u002Fblog\u002F2025\u002Fmongodb-queryable-encryption\u002F",{"title":317,"date":318,"url":319},"Lazy Loading with EF Core Proxies","2025-04-02","\u002Fblog\u002F2025\u002Fef-proxies\u002F",[],1780900528381]