假如说有个
class X
{
    public Func<string> Fn { get; set; }
}X x = new X();
x.Fn = () => someObj.StringProp;
那么给一个返回string的delegate赋值一个 ()=>对象.字符串属性。
我不太理解这种用法。难道不是x.Fn = ()=> { return someObj.String.Prop; }这样子吗?

解决方案 »

  1.   

    2种写法,用{}的要写return,不用{}的省略return默认=>后面表达式返回结果为return的值。
      

  2.   

    Silverlight的DataForm.AutoGeneratingFiled里有这么一段:if(e.PropertyName == "Password")
    {
        PasswordBox passwordBox = (PasswordBox)e.Field.Content;
        this.registrationData.PasswordAccessor = () => passwordBox.Password;
    }
    registrationData对象的类里
    internal Func<string> PasswordAccessor { get; set; }这样子。我不太理解这种用法。
      

  3.   

     不同写法
     x=>{return x+1;}   
     x => x+1   
    deleage(int x){return x+1;}  
    Func<int,bool> a = i=>(i & 1) == 1;
      

  4.   

    Func<string> 表示无参,返回值为string的委托
    Func<object,string,int> 表示传入参数为object, string 返回值为int的委托
      

  5.   


    正解。
    参考:        static string abc() { return "ABC"; }        public delegate string StrHandler();
            private void button1_Click(object sender, EventArgs e)
            {            X x = new X();
                //1.lambda表达式
                x.Fn = () => { return "abc"; };
                MessageBox.Show(x.Fn.Invoke());
                //2.委托
                x.Fn = abc;
                MessageBox.Show(x.Fn.Invoke());
                //3.匿名委托
                x.Fn = delegate() { return "123"; };
                MessageBox.Show(x.Fn.Invoke());
            }
      

  6.   

    Func<string>中最后一个参数表示返回值类型,其余的参数是你要传入的参数
    把最后一个参数当返回类型,前面的参数当方法参数,就能确定该使用什么样的委托。