private static System.Collections.Generic.IDictionary GetInitialDictionary( System.IO.TextReader file ) { var output = new System.Collections.Generic.Dictionary( System.StringComparer.Ordinal ); var headers = new System.Collections.Generic.Dictionary( System.StringComparer.OrdinalIgnoreCase ); System.Int32 i = 0; foreach ( var header in file.ReadRecord( "\r\n", '\"', ',' ) ) { headers.Add( header, i++ ); } while ( -1 != file.Peek() ) { var row = file.ReadRecord( "\r\n", '\"', ',' ).ToArray(); if ( row.Length <= 3 ) { continue; } var assembly = System.Reflection.Assembly.Load( row[ headers[ "Assembly" ] ] ); var type = assembly.GetType( row[ headers[ "Type" ] ], true, true ); var method = type.GetMethod( row[ headers[ "Method" ] ], 0, System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public, null, System.Reflection.CallingConventions.Standard, new System.Type[ 1 ] { typeof( Icod.Collections.Immutable.IStack ) }, null ); if ( method.ReturnType != typeof( Icod.Collections.Immutable.IStack ) ) { throw new System.InvalidOperationException( "Intrinsic operator misconfigured" ); } var code = method.CreateDelegate( typeof( System.Func, Icod.Collections.Immutable.IStack> ) ); var name = row[ headers[ "Name" ] ]; var @operator = new Type( name, row[ headers[ "Ancestry" ] ], null, (System.Func, Icod.Collections.Immutable.IStack>)code ); output.Add( name, @operator ); } return output; }