2009-08-28 2 views
1

настоящее время у меня это:Передача параметра делегировать функции

instance = new Class1<Type1>(
       "param1", 
       () => 
       new ViewDataDictionary<Type2>(
        new Class2 
        { 
         Prop1= CreateList(new List<long> { 234 }), 
         Prop2= CreateList(new long[] { 234 }) 
        })); 

Я хочу передать переменную в функции CreateList вместо этого. Что-то вроде этого

long p1 = 123; 
instance = new Class1<Type1>(
        "param1", 
        () => 
        new ViewDataDictionary<Type2>(
         new Class2 
         { 
          Prop1= CreateList(new List<long> { p1}), 
          Prop2= CreateList(new long[] { p1}) 
         })); 

Но это дает мне ошибку сериализации, если я пытаюсь сделать выше. Все классы маркируются сериализуемыми.

ответ

3

Когда вы ссылаетесь на локальную переменную в выражении лямбда, она генерирует замыкание (класс, сгенерированный компилятором, который «захватывает» вашу локальную переменную в качестве поля). Это замыкание не помечаются как сериализации, так что сериализация не удается ...

Вместо этого, вы можете изменить тип лямбда-выражения, чтобы принять параметр и передать значение в качестве отдельного параметра:

long p1 = 123; 
instance = new Class1<Type1>(
       "param1", 
       (prm) => 
       new ViewDataDictionary<Type2>(
        new Class2 
        { 
         Prop1= CreateList(new List<long> { prm }), 
         Prop2= CreateList(new long[] { prm }) 
        }), 
       p1); 
+0

Я хочу сделать это как общий делегат. Может существовать функция, выполняемая делегатом, которая не может иметь никаких параметров или иметь большее количество параметров. Я думал о наличии массива объектов. Но есть ли лучший способ? – user99322

+0

Ну, чтобы сохранить класс сериализуемым, ваше лямбда-выражение не должно захватывать какую-либо локальную переменную. Таким образом, единственное решение, которое я вижу, будет охватывать все случаи, - это использовать массив объектов (или, может быть, словарь) в качестве параметра для делегата, хотя это не очень удобно –

Смежные вопросы