代码之家  ›  专栏  ›  技术社区  ›  Marc Gravell

CF 2.0列表上的MethodAccessException<T>.Sort

  •  3
  • Marc Gravell  · 技术社区  · 17 年前

    library code 只有 MethodAccessException . 我很确定这是一个运行时错误,但是有人知道什么好的解决方法吗?它在CF3.5中运行良好,但我也需要能够支持CF2.0。

    T 打电话的人。我不做任何让人讨厌的事

    它所做的只是包装这些值并将它们添加到列表中, Comparison<> . 我也试过了 Array.Sort , IComparer<Wrapper<T>> IComparable<Wrapper<T>> 等-全部 以同样的方式失败: MethodAccessException -

    如果 图书馆

    但是,让 T 公共场所,一切正常。。。请注意,我们从来没有分类 T -我们只是和你一起工作 Wrapper<T> ...

    感谢您的任何意见。。。


    库程序集:

    public static class LibraryClass
    {
        public static void Test<T>(T foo, T bar)
        {
            // vastly simplified... I am aware that it is already in order here ;-p
            var list = new List<Wrapper<T>>();
            list.Add(new Wrapper<T> { Tag = 1, Value = foo });
            list.Add(new Wrapper<T> { Tag = 2, Value = bar });
    
            list.Sort((x,y) => x.Tag.CompareTo(y.Tag)); // BOOM!!
        }
    }
    
    public class Wrapper<T> // public to prove this isn't a factor...
    {
        public T Value { get; set; }
        public int Tag { get; set; }
    }
    

    调用程序集:

    public static class Program
    {
        static void Main()
        {
            MyData foo = new MyData {Name = "foo"},
                bar = new MyData {Name = "bar"};
    
            LibraryClass.Test<MyData>(foo, bar);
        }
    }
    
    class MyData // but make MyData public and it works...
    {
        public string Name { get; set; }
    }
    
    2 回复  |  直到 17 年前
        1
  •  2
  •   Chris Kimpton    17 年前

    我想当它爆炸时,你不会得到堆栈跟踪。

        2
  •  0
  •   GregC Benjamin Baumann    17 年前

    我记得(有时)在确保目标设备上有正确的dotNET内容时遇到了麻烦。这是在dotNET CF 1.0天内完成的。这还会是这里的问题吗?