Lambda表达式 - 参数不可知?

时间:2011-07-16 16:30:54

标签: c# lambda expression

我宣布这个类:

public class SimpleArea<T> where T: Control
{
    private T control;

    public SimpleArea(T control)
    {
        this.control = control;
    }

}

在我的主程序中,我想做这样的事情:

var SimpleAreaPanel = SimpleArea<Panel>(p => { p.Height= 150; })

问题是他无法定义智能感知“参数??? p”的“p”类型

我如何完成此指示?

3 个答案:

答案 0 :(得分:5)

您的构造函数不接受lambda - 它需要一个T实例,所以Panel。要么一个Panel,要么写一个可以接受该表达的constucor - 也许是Action<T>

就个人而言,我怀疑你的意思是:

new Panel {Height = 150}

是一个对象初始值设定项,而不是lambda - 即。

var SimpleAreaPanel = new SimpleArea<Panel>(
    new Panel { Height= 150 });

答案 1 :(得分:3)

如果我理解正确,你根本不需要使用lambda。

var SimpleAreaPanel = new SimpleArea<Panel>(new Panel{Height = 150});

答案 2 :(得分:1)

你需要这样的东西:

class SimpleArea<T> where T : Control, new()
{
    public T control;

    public SimpleArea(Action<T> action)
    {
        control = new T();
        action(control);
    }
}

所以你可以写:

var SimpleAreaPanel = new SimpleArea<Panel>(p => { p.Height = 150; });

但我不知道该为...