2013-03-30 2 views
0

У меня есть классКак выполнить действия делегата?

public class TextBoxConfig 
    { 
     public string Caption { get; set; } 
     public string FieldName { get; set; } 
     public int Width { get; set; } 
     public string Name { get; set; } 
    } 

и еще один служебный класс, который имеет метод, который принимает TextBoxConfig в качестве параметра, как этот

public class Util 
    { 
     public static TextBox ApplySettings(TextBoxConfig config) 
     { 
     //Doing something 
     } 
    } 

В общем случае можно назвать Util метод ApplySettings класса как этот

TextBoxConfig config = new TextBoxConfig(); 
    config.Caption = "Name"; 
    config.FieldName = "UserName" 
    config.Width = 20; 
    config.Name = "txtName"; 

    TextBox txt = Util.ApplySettings(config); 

, но я хочу передать параметр ApplySettings следующим образом

TextBox txt = Util.ApplySettings(o => 
    { 
     o.Caption = "Name"; 
     o.FieldName = "UserName" 
     o.Width = 20; 
     o.Name = "txtName"; 
    });    

Пожалуйста, предложите мне, как я могу это сделать ..

ответ

0

Хорошо, подтяните себя: вот то же самое, только что введенное с лямбда-выражениями.

TextBox txt = Util.ApplySettings(o => 
{ 
    o.Caption = "Name"; 
    o.FieldName = "UserName"; 
    o.Width = 20; 
    o.Name = "txtName"; 
}); 

public class Util 
{ 
    public static TextBox ApplySettings(TextBoxConfig config) 
    { 
     //Doing something 
    } 

    public static TextBox ApplySettings(Action<TextBoxConfig> modifier) 
    { 
     var config = new TextBoxConfig(); 
     modifier(config); 

     return ApplySettings(config);    
    } 
} 

Мне пришлось добавить некоторые точки с запятой после утверждений. И я предпочел бы другой ответ. Но я надеюсь, что это удовлетворит ваше стремление к лямбда-выражениям.

+0

+1: для ответа на вопрос (независимо от того, насколько абсурдно это может звучать; p) – leppie

+0

Великий ... спасибо Das :) –

0

Не точно так же, как ваше желание, но довольно близко:

TextBox txt = Util.ApplySettings(new TextBoxConfig() 
{ 
    Caption = "Name", 
    FieldName = "UserName", 
    Width = 20, 
    Name = "txtName" 
}); 

Примечание запятые после каждого параметра. См. http://msdn.microsoft.com/en-us/library/vstudio/bb397680.aspx.

+0

Спасибо за комментарий, это то же самое, что я создаю экземпляр, но я хочу использовать выражение Лямбда. –

+0

@Neeraj Gupta, зачем? Lambda - это функция, но вы не передаете функцию. – aush

+0

, чтобы установить свойства класса TextBoxConfig, как я попросил установить –

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