c# - CF 2.0 List<T>.Sort 上的 MethodAccessException

标签 c# .net compact-framework

我有一些 library code适用于一系列 .NET 运行时(常规、CF、Silverlight 等)- 但一小块代码 在 CF 2.0 上中断,带有 MethodAccessException .我很确定这是一个运行时错误,但有人知道任何好的解决方法吗?它在 CF 3.5 中运行良好,但我也需要能够支持 CF 2.0。

具体来说,这与使用泛型的库程序集有关,被赋予一个非公开的 T由来电者。我没有对 T 做任何令人讨厌的事情(比如反射),但它还是坏了……

它所做的只是包装值并将它们添加到列表中, 然后通过 Comparison<> 对列表进行排序.我也试过Array.Sort , IComparer<Wrapper<T>> , IComparable<Wrapper<T>> , 等等 - 所有 以同样的方式失败:MethodAccessException - 使用 VS 提示:

If the access level of a method in a class library has changed, recompile any assemblies that reference that library.

但是制作T public 并且一切正常...请注意,我们从未对 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; }
}

最佳答案

您是否尝试过编写您自己的排序 - 也许内置的排序正在做一些反射恶作剧...不是为了长期使用您自己的排序 - 而是作为调试问题的一种方式。用其他东西编写代码应该很快,至少可以看看是什么。

我想当它开始运行时你不会得到堆栈跟踪。

关于c# - CF 2.0 List<T>.Sort 上的 MethodAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/308154/

相关文章:

c# - 如何在WPF项目中固定Avalondock选项卡的位置

c# - 在线更新一个C#程序

c# - 针对特定 XSD 架构验证 XML

c# - 无法使用 Environment.GetResourceString 静态方法

C#:字符串参数被神秘地重置为空 - 请帮忙!

.net - .net 中的代码注入(inject)是什么(作为编程技巧)?

c# - EF6 - 运行不带种子的更新数据库命令

c# - 远程监控设计

c# - 在 Visual Studio 2008 for .NET CF 中处理不同的分辨率

c# - 确定 GDI 句柄和 USER 对象的数量