2つの異なる開発ボックスでコンパイルしたときにコードが異なる動作をする状況があります。なぜ私は理解できません。この問題を最もよく表しているキーワードがわかりません。ウサギは、1つのボックスのソースは、別のボックスソースで値クラスインスタンスを参照する必要がある場合のクロージャのキャプチャ
{() => Program.Names}
を持っているに呼び出さ
は値
{() => value(NPC.Program+<>c__DisplayClass1_0).Names}
は穴が常に関係なく、それが上のコンパイル何コンピュータ値を持っていません。
{() => value(NPC.Program+<>c__DisplayClass1_0).closure}
私はウサギを呼び出すときに1台のマシンが、クラスの表現と他のマシンが閉鎖のための価値を持っていた理由を把握しようとしています。また、それを制御する方法があるかどうかを知りたいと思います。ありがとう!
class Program
{
public static ObservableCollection<string> Names = new ObservableCollection<string>();
static void Main(string[] args)
{
string closure = "closure";
if(closure.Length > 0)
{
GoingDown(p => {
closure.ToString();
Names = new ObservableCollection<string>();
Rabbit(() => Names);
Hole(() => closure);
}, closure);
}
}
public static void Rabbit<SourceType>(Expression<Func<ObservableCollection<SourceType>>> source)
{
"Testing".ToString();
}
public static void Hole(Expression<Func<object>> source)
{
"Testing".ToString();
}
public static void GoingDown(Action<object> a, object target)
{
Action b =() =>
{
a(target);
};
b();
}
}
両方のシステムで、どのバージョンのC#とどの.netフレームワークが使用されていますか? – RBarryYoung