首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于Cf2.0的MethodAccessException List<T>.Sort

基于Cf2.0的MethodAccessException List<T>.Sort
EN

Stack Overflow用户
提问于 2008-11-21 07:58:48
回答 2查看 1.1K关注 0票数 4

我有一些图书馆代码可以在一系列的.NET运行时(常规的、CF的、Silverlight等)上工作--但是一小块代码正在用MethodAccessException破坏CF2.0上的只使用。我很确定这是一个运行时错误,但是有谁知道什么好的解决办法吗?它在CF3.5中工作得很好,但我也需要能够支持CF2.0。

具体来说,这与使用泛型的库程序集有关,调用方给它一个非公共的T。我不会对T做任何讨厌的事情(比如反射),但它无论如何都会破坏.

它所做的就是包装这些值并将它们添加到列表中,然后通过一个Comparison<>对列表进行排序。我还尝试过Array.SortIComparer<Wrapper<T>>IComparable<Wrapper<T>>等--都以同样的方式失败了:MethodAccessException --使用VS提示:

如果类库中的方法的访问级别已更改,请重新编译引用该库的任何程序集。

但是让T公开,一切都很好.请注意,我们从来没有在T上排序-我们只使用Wrapper<T>.

任何投入都很感谢..。

图书馆大会:

代码语言:javascript
运行
复制
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; }
}

调用程序集:

代码语言:javascript
运行
复制
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; }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-11-21 08:14:38

你试过写你自己的作品吗?也许里面的一个是在做一些反思性的恶作剧.这并不是为了长远地使用自己的问题,而是作为调试问题的一种手段。它应该能够快速地在其他东西中编码,并且至少能看到什么。

我想当它爆炸的时候你不会发现堆栈的痕迹。

票数 2
EN

Stack Overflow用户

发布于 2009-06-23 09:03:25

我记得有麻烦(有时),以确保正确的dotNET的东西在目标设备上。这是在dotNET CF 1.0天。这是否仍然是问题所在?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/308154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档