edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;C703685
File: RubyTests.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;C703685  (server)    1/13/2009 3:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/RubyTests.cs;Indexers2
@@ -316,6 +316,7 @@
                 ClrGenerics1,
                 ClrMethods1,
                 ClrMethodsVisibility1,
+                ClrIndexers1,
                 ClrGenericMethods1,
                 ClrOverloadSelection1,
                 ClrInterfaces1,
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/ClrTests.cs;C703685
File: ClrTests.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/ClrTests.cs;C703685  (server)    1/13/2009 3:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/IronRuby.Tests/Runtime/ClrTests.cs;Indexers2
@@ -222,6 +222,38 @@
 ");
         }
 
+        public class ClassWithIndexer1 {
+            public int[,] Values = new int[,] { {0, 10}, {20, 30} };
+
+            public int this[int i, int j] { get { return Values[i,j]; } set { Values[i,j] = value; } }
+        }
+
+        public void ClrIndexers1() {
+            Context.ObjectClass.SetConstant("CI", Context.GetClass(typeof(ClassWithIndexer1)));
+            
+            // default indexers:
+            AssertOutput(() => CompilerTest(@"
+c = CI.new
+c[0,1] += 1
+p c[0, 1]
+"), @"
+11
+");
+            // non-default indexers:
+            // TODO: We need to use VB or generate IL to test this.
+            // TODO: improve access
+            //   If a property accessor with parameters is called without arguments the result is a PropertyAccessor object with [], []= defined.
+            //   Then the calls could look like c.foo[1,2] = 3. 
+
+//            AssertOutput(() => CompilerTest(@"
+//c = CI.new
+//c.method(:foo=).call(1, 0, c.method(:foo).call(1, 0) + 5)
+//p c.method(:foo).call(1, 0)
+//"), @"
+//25
+//");
+        }
+
 #pragma warning disable 67 // event not used
         public class GenericMethods {
             public static string M0<T>() {
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/socket/BasicSocket.cs;C674241
File: BasicSocket.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/socket/BasicSocket.cs;C674241  (server)    1/13/2009 3:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/socket/BasicSocket.cs;Indexers2
@@ -60,11 +60,11 @@
         }
 
         public override WaitHandle/*!*/ CreateReadWaitHandle() {
-            return _socket.BeginReceive(Utils.Array.EmptyBytes, 0, 0, SocketFlags.Peek, null, null).AsyncWaitHandle;
+            return _socket.BeginReceive(Utils.EmptyBytes, 0, 0, SocketFlags.Peek, null, null).AsyncWaitHandle;
         }
 
         public override WaitHandle/*!*/ CreateWriteWaitHandle() {
-            return _socket.BeginSend(Utils.Array.EmptyBytes, 0, 0, SocketFlags.Peek, null, null).AsyncWaitHandle;
+            return _socket.BeginSend(Utils.EmptyBytes, 0, 0, SocketFlags.Peek, null, null).AsyncWaitHandle;
         }
 
         public override WaitHandle/*!*/ CreateErrorWaitHandle() {
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/Glob.cs;C574574
File: Glob.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/Glob.cs;C574574  (server)    1/13/2009 3:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/Glob.cs;Indexers2
@@ -387,7 +387,7 @@
                 _pattern = (pattern == "**") ? "*" : pattern;
                 _flags = flags | Constants.FNM_CASEFOLD;
                 _result = new List<string>();
-                _dirOnly = (_pattern.Length > 0) && (_pattern[_pattern.Length - 1] == '/');
+                _dirOnly = _pattern.LastCharacter() == '/';
                 _stripTwo = false;
             }
 
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/MutableString.StringBuilderContent.cs;C633889
File: MutableString.StringBuilderContent.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/MutableString.StringBuilderContent.cs;C633889  (server)    1/13/2009 3:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/MutableString.StringBuilderContent.cs;Indexers2
@@ -37,7 +37,7 @@
             #region Data Operations
 
             public byte[] DataToBytes() {
-                return _data.Length > 0 ? _owner._encoding.GetBytes(_data.ToString()) : IronRuby.Runtime.Utils.Array.EmptyBytes;
+                return _data.Length > 0 ? _owner._encoding.GetBytes(_data.ToString()) : IronRuby.Runtime.Utils.EmptyBytes;
             }
 
             public char DataGetChar(int index) {
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/MutableString.StringContent.cs;C633889
File: MutableString.StringContent.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/MutableString.StringContent.cs;C633889  (server)    1/13/2009 3:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/MutableString.StringContent.cs;Indexers2
@@ -42,7 +42,7 @@
             #region Data Operations
 
             protected byte[] DataToBytes() {
-                return _data.Length > 0 ? _owner._encoding.GetBytes(_data) : IronRuby.Runtime.Utils.Array.EmptyBytes;
+                return _data.Length > 0 ? _owner._encoding.GetBytes(_data) : IronRuby.Runtime.Utils.EmptyBytes;
             }
 
             // TODO:
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;C695629
File: RubyClass.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;C695629  (server)    1/13/2009 3:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Builtins/RubyClass.cs;Indexers2
@@ -352,16 +352,26 @@
                 return false;
             }
 
+            // We look only for members directly declared on the type and handle method overloads inheritance manually.  
             BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly;
             bindingFlags |= (_isSingletonClass) ? BindingFlags.Static : BindingFlags.Instance;
 
-            if (name.EndsWith("=")) {
+            if (name == "[]" || name == "[]=") {
+                object[] attrs = type.GetCustomAttributes(typeof(DefaultMemberAttribute), false);
+                if (attrs.Length == 1) {
+                    // default indexer accessor:
+                    bool isSetter = name.Length == 3;
+                    if (TryGetClrProperty(type, bindingFlags, ((DefaultMemberAttribute)attrs[0]).MemberName, isSetter, out method)) {
+                        return true;
+                    }
+                }
+            } else if (name.LastCharacter() == '=') {
                 string propertyName = name.Substring(0, name.Length - 1);
                 
                 // property setter:
-                if (TryGetClrMethod(type, bindingFlags, "set_" + propertyName, out method)) return true;
+                if (TryGetClrProperty(type, bindingFlags, propertyName, true, out method)) return true;
                 unmangled = RubyUtils.TryUnmangleName(propertyName);
-                if (unmangled != null && TryGetClrMethod(type, bindingFlags, "set_" + unmangled, out method)) return true;
+                if (unmangled != null && TryGetClrProperty(type, bindingFlags, unmangled, true, out method)) return true;
 
                 // writeable field:
                 if (TryGetClrField(type, bindingFlags, propertyName, true, out method)) return true;
@@ -373,8 +383,8 @@
                 if (unmangled != null && TryGetClrMethod(type, bindingFlags, unmangled, out method)) return true;
 
                 // getter:
-                if (TryGetClrMethod(type, bindingFlags, "get_" + name, out method)) return true;
-                if (unmangled != null && TryGetClrMethod(type, bindingFlags, "get_" + unmangled, out method)) return true;
+                if (TryGetClrProperty(type, bindingFlags, name, false, out method)) return true;
+                if (unmangled != null && TryGetClrProperty(type, bindingFlags, unmangled, false, out method)) return true;
 
                 // event:
                 if (TryGetClrEvent(type, bindingFlags, name, out method)) return true;
@@ -404,7 +414,7 @@
             }
         }
 
-        private IList<MethodBase>/*!*/ SelectNonPrivateMethods(MemberInfo[]/*!*/ members) {
+        private MethodBase[]/*!*/ SelectNonPrivateMethods(MemberInfo[]/*!*/ members) {
             var result = new List<MethodBase>(members.Length);
             for (int i = 0; i < members.Length; i++) {
                 var method = (MethodBase)members[i];
@@ -412,9 +422,13 @@
                     result.Add(method);
                 }
             }
-            return result;
+            return result.ToArray();
         }
 
+        private bool TryGetClrProperty(Type/*!*/ type, BindingFlags bindingFlags, string/*!*/ name, bool isWrite, out RubyMemberInfo method) {
+            return TryGetClrMethod(type, bindingFlags, (isWrite ? "set_" : "get_") + name, out method);
+        }
+
         private bool TryGetClrField(Type/*!*/ type, BindingFlags bindingFlags, string/*!*/ name, bool isWrite, out RubyMemberInfo method) {
             Assert.NotNull(type, name);
 
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Loader.cs;C695977
File: Loader.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Loader.cs;C695977  (server)    1/13/2009 3:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Loader.cs;Indexers2
@@ -507,7 +507,7 @@
             // MRI doesn't load file w/o .rb extension:
             if (IsKnownExtension(extension, knownExtensions)) {
                 return GetSourceUnit(path, extension, false);
-            } else if (Utils.Array.IndexOf(_LibraryExtensions, extension, DlrConfiguration.FileExtensionComparer) != -1) {
+            } else if (_LibraryExtensions.IndexOf(extension, DlrConfiguration.FileExtensionComparer) != -1) {
                 if (Platform.FileExists(path)) {
                     return new ResolvedFile(path, null);
                 }
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyScope.cs;C695629
File: RubyScope.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyScope.cs;C695629  (server)    1/13/2009 3:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyScope.cs;Indexers2
@@ -629,7 +629,7 @@
                 }
             } else if (args.Length == 1) {
                 string str = SymbolTable.IdToString(name);
-                if (str.Length > 0 && str[str.Length - 1] == '=') {
+                if (str.LastCharacter() == '=') {
                     SymbolId plainName = SymbolTable.StringToId(str.Substring(0, str.Length - 1));
                     globalScope.SetName(plainName, args[0]);
                     return args[0];
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Utils.cs;C703685
File: Utils.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Utils.cs;C703685  (server)    1/13/2009 3:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Utils.cs;Indexers2
@@ -21,33 +21,24 @@
 
 namespace IronRuby.Runtime {
     public static class Utils {
-        public static class Array {
-            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2105:ArrayFieldsShouldNotBeReadOnly")]
-            public static readonly byte[] EmptyBytes = new byte[0];
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2105:ArrayFieldsShouldNotBeReadOnly")]
+        public static readonly byte[] EmptyBytes = new byte[0];
 
-	        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2105:ArrayFieldsShouldNotBeReadOnly")]
-	        public static readonly MemberInfo[] EmptyMemberInfos = new MemberInfo[0];
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2105:ArrayFieldsShouldNotBeReadOnly")]
+        public static readonly MemberInfo[] EmptyMemberInfos = new MemberInfo[0];
 
-            public static int IndexOf(/*this*/ string[]/*!*/ array, string/*!*/ value, StringComparer/*!*/ comparer) {
-                ContractUtils.RequiresNotNull(array, "array");
-                ContractUtils.RequiresNotNull(value, "value");
-                ContractUtils.RequiresNotNull(comparer, "comparer");
+        public static int IndexOf(this string[]/*!*/ array, string/*!*/ value, StringComparer/*!*/ comparer) {
+            ContractUtils.RequiresNotNull(array, "array");
+            ContractUtils.RequiresNotNull(value, "value");
+            ContractUtils.RequiresNotNull(comparer, "comparer");
 
-                for (int i = 0; i < array.Length; i++) {
-                    if (comparer.Equals(array[i], value)) {
-                        return i;
-                    }
+            for (int i = 0; i < array.Length; i++) {
+                if (comparer.Equals(array[i], value)) {
+                    return i;
                 }
-
-                return -1;
             }
-        }        
 
-        [Conditional("DEBUG")]
-        public static void Log(string/*!*/ message, string/*!*/ category) {
-#if !SILVERLIGHT
-            Debug.WriteLine((object)message, category);
-#endif
+            return -1;
         }
 
         internal static bool IsAscii(this string/*!*/ str) {
@@ -59,17 +50,10 @@
             return true;
         }
 
-        public static long DateTimeTicksFromStopwatch(long elapsedStopwatchTicks) {
-#if !SILVERLIGHT
-            if (Stopwatch.IsHighResolution) {
-                return (long)(((double)elapsedStopwatchTicks) * 10000000.0 / (double)Stopwatch.Frequency);
-            }
-#endif
-            return elapsedStopwatchTicks;
+        public static int LastCharacter(this string/*!*/ str) {
+            return str.Length == 0 ? -1 : str[str.Length - 1];
         }
-    }
 
-    public static class BclExtensions {
         public static int IndexOf(this StringBuilder/*!*/ sb, char value) {
             ContractUtils.RequiresNotNull(sb, "sb");
 
@@ -82,18 +66,29 @@
             return -1;
         }
 
-        public static bool TrueForAll<T>(this T[]/*!*/ array, Predicate<T>/*!*/ predicate) {
-#if SILVERLIGHT
-            foreach (var item in array) {
-                if (!predicate(item)) {
-                    return false;
-                }
+        public static TOutput[]/*!*/ ConvertAll<TInput, TOutput>(this TInput[]/*!*/ array, Converter<TInput, TOutput>/*!*/ converter) {
+            var result = new TOutput[array.Length];
+            for (int i = 0; i < array.Length; i++) {
+                result[i] = converter(array[i]);
             }
-            return true;
-#else
-            return Array.TrueForAll(array, predicate);
+            return result;
+        }
+
+        [Conditional("DEBUG")]
+        public static void Log(string/*!*/ message, string/*!*/ category) {
+#if !SILVERLIGHT
+            Debug.WriteLine((object)message, category);
 #endif
         }
+
+        public static long DateTimeTicksFromStopwatch(long elapsedStopwatchTicks) {
+#if !SILVERLIGHT
+            if (Stopwatch.IsHighResolution) {
+                return (long)(((double)elapsedStopwatchTicks) * 10000000.0 / (double)Stopwatch.Frequency);
+            }
+#endif
+            return elapsedStopwatchTicks;
+        }
     }
 }
 
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyAccessorInfo.cs;C703685
File: RubyAccessorInfo.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyAccessorInfo.cs;C703685  (server)    1/13/2009 3:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyAccessorInfo.cs;Indexers2
@@ -37,7 +37,7 @@
         }
 
         public override MemberInfo/*!*/[]/*!*/ GetMembers() {
-            return Utils.Array.EmptyMemberInfos;
+            return Utils.EmptyMemberInfos;
         }
     }
 
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyLambdaMethodInfo.cs;C703685
File: RubyLambdaMethodInfo.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyLambdaMethodInfo.cs;C703685  (server)    1/13/2009 3:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyLambdaMethodInfo.cs;Indexers2
@@ -54,7 +54,7 @@
 
         public override RubyMemberInfo TrySelectOverload(Type/*!*/[]/*!*/ parameterTypes) {
             return parameterTypes.Length == _lambda.Dispatcher.ParameterCount 
-                && parameterTypes.TrueForAll((type) => type == typeof(object)) ? this : null;
+                && CollectionUtils.TrueForAll(parameterTypes, (type) => type == typeof(object)) ? this : null;
         }
 
         internal override void BuildCallNoFlow(MetaObjectBuilder/*!*/ metaBuilder, CallArguments/*!*/ args, string/*!*/ name) {
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupInfo.cs;C703685
File: RubyMethodGroupInfo.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupInfo.cs;C703685  (server)    1/13/2009 3:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupInfo.cs;Indexers2
@@ -28,11 +28,11 @@
 using Microsoft.Scripting.Utils;
 using IronRuby.Builtins;
 using IronRuby.Compiler.Generation;
+using IronRuby.Compiler;
 
 using AstFactory = IronRuby.Compiler.Ast.AstFactory;
 using AstUtils = Microsoft.Scripting.Ast.Utils;
 using Ast = System.Linq.Expressions.Expression;
-using IronRuby.Compiler;
 
 namespace IronRuby.Runtime.Calls {
     
@@ -42,8 +42,8 @@
     /// </summary>
     public sealed class RubyMethodGroupInfo : RubyMemberInfo {
         private readonly Delegate/*!*/[]/*!*/ _overloads;
-        private IList<MethodBase> _methodBases;
-        private IList<MethodBase> _staticDispatchMethods;
+        private MethodBase/*!*/[] _methodBases;
+        private MethodBase/*!*/[] _staticDispatchMethods;
         private bool? _hasVirtuals;
 
         // remove call site type object (CLR static methods don't accept self type):
@@ -54,14 +54,10 @@
             get { return _isRubyMethod; }
         }
 
-        private IList<MethodBase>/*!*/ MethodBases {
+        private MethodBase/*!*/[]/*!*/ MethodBases {
             get {
                 if (_methodBases == null) {
-                    var result = new MethodBase[_overloads.Length];
-                    for (int i = 0; i < _overloads.Length; i++) {
-                        result[i] = _overloads[i].Method;
-                    }
-                    _methodBases = result;
+                    _methodBases = _overloads.ConvertAll((d) => d.Method);
                 }
 
                 // either all methods in the group are static or instance, a mixture is not allowed:
@@ -91,7 +87,7 @@
         /// <summary>
         /// Creates a CLR method group.
         /// </summary>
-        internal RubyMethodGroupInfo(IList<MethodBase/*!*/>/*!*/ methods, RubyModule/*!*/ declaringModule, bool isStatic)
+        internal RubyMethodGroupInfo(MethodBase/*!*/[]/*!*/ methods, RubyModule/*!*/ declaringModule, bool isStatic)
             : base(RubyMemberFlags.Public, declaringModule) {
             Assert.NotNull(methods, declaringModule);
             _methodBases = methods;
@@ -105,7 +101,7 @@
         }
 
         // copy ctor
-        private RubyMethodGroupInfo(RubyMethodGroupInfo/*!*/ info, RubyMemberFlags flags, RubyModule/*!*/ module, IList<MethodBase> methodBases)
+        private RubyMethodGroupInfo(RubyMethodGroupInfo/*!*/ info, RubyMemberFlags flags, RubyModule/*!*/ module, MethodBase/*!*/[] methodBases)
             : base(flags, module) {
             _methodBases = methodBases;
             _overloads = info._overloads;
@@ -136,7 +132,7 @@
                 return null;
             }
 
-            return new RubyMethodGroupInfo(this, Flags, DeclaringModule, boundMethods);
+            return new RubyMethodGroupInfo(this, Flags, DeclaringModule, boundMethods.ToArray());
         }
 
         /// <summary>
@@ -154,7 +150,7 @@
                 return null;
             }
 
-            return new RubyMethodGroupInfo(this, Flags, DeclaringModule, boundMethods);
+            return new RubyMethodGroupInfo(this, Flags, DeclaringModule, boundMethods.ToArray());
         }
 
         private static bool IsOverloadSignature(MethodBase/*!*/ method, Type/*!*/[]/*!*/ parameterTypes) {
@@ -229,17 +225,17 @@
             }
         }
 
-        private IList<MethodBase>/*!*/ GetStaticDispatchMethods(Type/*!*/ baseType, string/*!*/ name) {
+        private MethodBase/*!*/[]/*!*/ GetStaticDispatchMethods(Type/*!*/ baseType, string/*!*/ name) {
             if (!HasVirtuals) {
                 return MethodBases;
             }
             if (_staticDispatchMethods == null) {
-                _staticDispatchMethods = new MethodBase[MethodBases.Count];
-                for (int i = 0; i < MethodBases.Count; i++) {
+                _staticDispatchMethods = new MethodBase[MethodBases.Length];
+                for (int i = 0; i < MethodBases.Length; i++) {
                     MethodBase method = MethodBases[i];
                     _staticDispatchMethods[i] = method;
 
-                    MethodInfo methodInfo = (method as MethodInfo);
+                    MethodInfo methodInfo = method as MethodInfo;
                     if (methodInfo != null && methodInfo.IsVirtual) {
                         _staticDispatchMethods[i] = WrapMethod(methodInfo, baseType);
                     }
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodInfo.cs;C703685
File: RubyMethodInfo.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodInfo.cs;C703685  (server)    1/13/2009 3:45 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodInfo.cs;Indexers2
@@ -76,7 +76,7 @@
         public override RubyMemberInfo TrySelectOverload(Type/*!*/[]/*!*/ parameterTypes) {
             return parameterTypes.Length >= MandatoryParamCount 
                 && (HasUnsplatParameter || parameterTypes.Length <= MandatoryParamCount + OptionalParamCount)
-                && parameterTypes.TrueForAll((type) => type == typeof(object)) ? this : null;
+                && CollectionUtils.TrueForAll(parameterTypes, (type) => type == typeof(object)) ? this : null;
         }
 
         public override MemberInfo/*!*/[]/*!*/ GetMembers() {
===================================================================
