I noticed a great question from Luke Hutteman (of SharpReader fame) on Chris Sells blog.  His question is:

"Will VS.NET also (like IDEA) be smart enough to give me a dropdown with appropriate values for the template-variables? That is, if the template calls for an IList somewhere, will it show a dropdown with all IList-type variables that are in scope at that time?"

Note: If you're interested in the basics of creating expansions, check out my first blog entry on expansions.

Back to Luke's question, the answer is yes it will.  In fact, the foreach expansion does exactly that by showing objects that implement the IEnumerable interface within the specific scope where the expansion was called.  To do this, you can add a <function></function> tag to the literal variable declaration and use the built-in function ListVariablesOfType(type)Below is a fragment of the XML markup of the foreach expansion: 

<literal>
   <id>collection</id>
   <tooltip>Name of collection or array to iterate through</tooltip>
   <function>ListVariablesOfType(System.Collections.IEnumerable)</function>
   <default>collection_to_loop</default>
  </literal>

When the expansion is invoked and the user tabs to the collection variable, they will see a list of IEnumerable collections.

The code section for the foreach expansion (below) is straighforward with the collection literal being declared the same as any other variable.

  <code language="csharp">
   <![CDATA[foreach ($type$ $indentifier$ in $collection$)
  {
   $selected$ $end$
  }]]>
  </code>

PS: If you still want to code in C# but want to use IDEA tools instead of VS, this post makes it sound like we'll soon have a version of IntelliJ for C# :)