У меня есть ситуация, когда код ведет себя по-другому, если скомпилирован в двух разных блоках разработки. Я не могу понять, почему. Я не уверен, какие ключевые слова лучше всего описывают эту проблему.Захват выражения, когда он должен ссылаться на экземпляр класса
Когда Кролик вызывается на одном источнике коробки имеет значение
{() => Program.Names}
На другом источнике коробки имеет значение
{() => value(NPC.Program+<>c__DisplayClass1_0).Names}
Отверстие всегда имеет значение независимо от того, на каком компьютере он собран на.
{() => value(NPC.Program+<>c__DisplayClass1_0).closure}
Я пытаюсь выяснить, почему одна машина имеет выражение для класса, а другая машина имеет значение для закрытия при вызывающему Кролика. Я также хотел бы знать, есть ли способ контролировать это. Благодаря!
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