さまざまな.NETランタイム(通常、CF、Silverlightなど)で動作するライブラリコードがいくつかありますが、コードの小さなブロックはCF2.0でのみ壊れていMethodAccessException
ます。ランタイムのバグだと確信していますが、誰かが良い回避策を知っていますか?CF 3.5では正常に動作しますが、CF2.0もサポートできる必要があります。
T
具体的には、これはジェネリックスを使用したライブラリアセンブリに関連しており、呼び出し元によって非公開になります。(反射など)嫌なことは何もしませんがT
、とにかく壊れます...
値をラップしてリストに追加し、を介してリストを並べ替えるだけComparison<>
です。私も試しましArray.Sort
た
IComparer<Wrapper<T>>
、、、IComparable<Wrapper<T>>
など-すべて同じように失敗しMethodAccessException
ます:-VSのヒントで:
クラスライブラリのメソッドのアクセスレベルが変更された場合は、そのライブラリを参照するアセンブリを再コンパイルします。
しかし、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; }
}