标签: anonymous-methods

ASP.NET代理和表达式 - 信息请求

根据我的理解,我解释Func委托的含义如下.请在需要时纠正它们.

Declaration : Func<int> dg ;

1.我可以将其解释为"指向返回整数的方法的委托吗?".

Declaration : Func<int,int> delg1=r=>2*r;

*2.我可以将其解释为"'r'是一个lambda表达式,它本身是一个整数类型的参数,被评估为'2*r'并返回一个int?.*

Comparison : Delegate and lambda expression

3.如果代表和lambdas都是函数poiinters,那里有什么不同?

Comparison : Are the following two declarations equal?

decl 1 : Func<int,int> fn=(r)=>45*r;

decl 2 : Expression<Func<int,int>> ex = (r) => r * 10;
Run Code Online (Sandbox Code Playgroud)

4.如果上述两种结构都用于同一目的,那么哪里有所不同?

c# delegates anonymous-methods

1
推荐指数
1
解决办法
149
查看次数

为什么我不能使用这样的匿名方法?

为什么我不能拥有这个?我的意思是它会节省代表声明:

int X=delegate int(){...};
Run Code Online (Sandbox Code Playgroud)

我知道可以这样做:

delegate int IntDelegate();
...
IntDelegate del=delegate(){return 25;};
int X=del();
Run Code Online (Sandbox Code Playgroud)

c# delegates anonymous-methods

1
推荐指数
1
解决办法
167
查看次数

这是怎么抛出InvalidCastException的

以下代码片段在foreach循环上抛出InvalidCastException:

无法将类型为"System.Windows.Forms.StatusStrip"的对象强制转换为"System.Windows.Forms.GroupBox".

我只是不明白这是怎么可能的......然后我又是一个菜鸟所以它可能是愚蠢的东西.

     private void doSlide(GroupBox MoveThis)
    {
        //location 12,27
        var t = Task.Factory.StartNew(() =>
            {
                ExecuteSecure(() =>
                    {
                            foreach (GroupBox box in this.Controls)
                            {
                                if (box != MoveThis)
                                {
                                    box.Left = (-1) * box.Width;
                                }
                                else
                                {
                                    do
                                    {
                                        if (box.Left > 12)
                                            box.Left--;
                                        else
                                            box.Left++;
                                    }
                                    while (box.Left != 12);
                                }
                            }

                    });
            });
    }
Run Code Online (Sandbox Code Playgroud)

这是Execute Secure的代码

private void ExecuteSecure(Action a)
        {
            if (InvokeRequired)
                BeginInvoke(a);
            else a();
        }
Run Code Online (Sandbox Code Playgroud)

基本上我有一个固定大小的表单和表单上的几个组框,其中只有一个在任何给定点可见.当我们需要创建一个新的GroupBox时,我们调用DoSlide(GroupBox)并指定我们想要显示的组框.然后它应该将窗体上的每个GroupBox移动到位置(-Box.Width,27),除了指定的窗体(滑动(递增或递减box.left)到视图中).

.net c# anonymous-methods

1
推荐指数
1
解决办法
507
查看次数

将匿名方法转换为lambda表达式

如果我要翻译这个匿名方法:

Func<int, int> f = delegate(int i)
{
     return i + 1;
};
Run Code Online (Sandbox Code Playgroud)

进入lambda表达式,它会这样:

Func<int, int> f = i => i + 1;
Run Code Online (Sandbox Code Playgroud)

(我知道:这个lambda表达式将秘密生成另一个匿名方法(由编译器),但这不是重点).

现在我想将以下方法转换为lambda表达式:

Func<int, int> f = delegate(int i)
{
     Debug.WriteLine("Inside the function!");
     return i + 1;
};
Run Code Online (Sandbox Code Playgroud)

有办法吗?我该怎么做?

c# lambda anonymous-methods

1
推荐指数
1
解决办法
126
查看次数

C#内联开关格式字符串

我想格式化词组并根据项目数结尾。

string s = string.Format("There are {0} items, bla bla {1}",
 itemsCnt, 
 () => {switch(itemsCnt)
 {
    case 0:
      return "make some...";
    case 1:
    case 2:
      return "try more";
    default:
      return "enough";
 }}
);
Run Code Online (Sandbox Code Playgroud)

语法不正确,我相信匿名方法应该以某种方式在这里工作...

更新

我可以使用单独的格式化功能。我想在Razor中使用该函数,并且希望将格式化逻辑放在一个地方。而且我很好奇如何做到这一点:-)

c# inline anonymous-methods

1
推荐指数
2
解决办法
1835
查看次数

为什么lambda和匿名方法不允许在左侧或作为运算符?

Lamb的左侧或作为运算符不允许使用Lambda.MSDN

一个真实的例子清楚的解释将不胜感激?

c# linq lambda anonymous-methods

1
推荐指数
1
解决办法
363
查看次数

C#中的简单匿名方法

请参阅下面的第二位代码..代码无法编译.我试图找出anon方法,我明白了..

但不是不使用我在网上找到的匿名方法的例子,它不能编译

使用VS2008 ..编译到.NET3.5

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestAnonymousMethods
{
    public class Program
    {
        // using an anon method
        static void Mainx(string[] args)
        {
            int[] _integers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

            int[] evenIntegers = Array.FindAll(_integers,
                                        // this is the anonymous method below
                                       delegate(int integer)
                                       {
                                           return (integer % 2 == 0);
                                       }
                );

            foreach (int integer in _integers) 
                Console.WriteLine(integer);

            foreach (int integer in evenIntegers)
                Console.WriteLine(integer);
        }

        // …
Run Code Online (Sandbox Code Playgroud)

c# delegates anonymous-methods

0
推荐指数
1
解决办法
385
查看次数

C#中类似JavaScript的匿名函数

可以在C#中完成以下操作吗?:

var greeting = "Hello" + function ()
{
    return " World";
}() + "!";
Run Code Online (Sandbox Code Playgroud)

我想做一些事情(C#伪代码):

var cell = new TableCell { CssClass = "", Text = return delegate ()
{
     return "logic goes here";
}};
Run Code Online (Sandbox Code Playgroud)

基本上我想实现某些逻辑的内联作用域,而不是将该块逻辑移动到单独的方法中.

javascript c# anonymous-methods anonymous-function

0
推荐指数
1
解决办法
1092
查看次数

在匿名方法中修改变量

我想在扩展方法的函数中修改局部变量.看到

int myvar=0;
MyList.Where(
    x =>
        {
            if (condition)
                myvar += 1;
            return false;
        });
return myvar;
Run Code Online (Sandbox Code Playgroud)

为什么那不起作用?

c# linq-to-objects anonymous-methods

0
推荐指数
1
解决办法
114
查看次数

奇怪的想法:C# - 声明一个方法insinde另一种方法

好的,在python中可以这样做:

def foo(monkeys):
    def bar(monkey):
        #process and return new monkey
    processed_monkeys = list()
    for monkey in monkeys:
        processed_monkeys += bar(monkey)
    return processed_monkeys
Run Code Online (Sandbox Code Playgroud)

(这只是一个愚蠢的例子)我有时会错过在c#中另一个方法中声明一个方法的功能.但今天我有以下想法来完成这个:

List<Monkey> foo(List<Monkey> monkeys)
{
    Func<Monkey, Monkey> bar = delegate(Monkey monkey)
    {
        //process and return new monkey
    }
    List<Monkey> processed_monkeys = new List<Monkey>(monkeys.Count);
    foreach(Monkey monkey in monkeys)
        processed_monkeys.Append(bar(monkey));
    return processed_monkeys;
}
Run Code Online (Sandbox Code Playgroud)

显然,变通方法不提供与原始功能完全相同的功能,因为Func或Action Delegates限制为4个参数,但很少需要4个以上的参数......

你对此有何看法?
这是邪恶的,应该避免除了非常特殊的情况吗?
这个表现如何?每次调用函数时都会创建一个新的bar函数,还是编译器会以某种方式优化它?

c# python methods anonymous-methods

0
推荐指数
1
解决办法
265
查看次数

一个方法如何等到匿名委托完成?

我有以下代码片段(作为示例)查找联系人:

public string Search()
{
    string address = "";

    ContactManager manager = new ContactManager();

    // LookupComplete is just a plain event
    manager.LookupComplete += delegate
    {
        address = manager.Address;
    };

    manager.SearchFor("bob");
    return address; // Address always appears to be populated
}
Run Code Online (Sandbox Code Playgroud)

更新:
这是ContactManager:

public class ContactManager
{
    public string Address {get;set;}
    public event LookupComplete;

    public void SearchFor(string query)
    {
        SomeParser parser = new Parser();
        parser.TokenParsed += new EventHandler<TokenParseEventArgs>(tokenParsed);
        parser.Parse(query);    
    }

    private void tokenParsed(object sender,TokenParseEventArgs e)
    {
        if (e.Message == "EOF")
        { …
Run Code Online (Sandbox Code Playgroud)

c# events anonymous-methods anonymous-delegates

0
推荐指数
1
解决办法
686
查看次数

匿名方法返回类型转换

我有一个对象"ConnectableProperty"将一个属性连接到另一个属性,并要求我提供它Func.现在我有2种类型 - Scalar和Color.两者都可以通过显式运算符相互转换.出于某种原因,我不能喂Func<double, double, Scalar>Func<double, double Color>,即使标量可以转换为彩色.这是怎么回事?

为了澄清,我添加了代码.请注意,可连接属性是"输入".输出(可以插入)是具有该签名的方法.

这是ConnectableProperty

public sealed class ConnectableProperty<T> : IEquatable<T>, IGetXY<T> where T : IValue<T>
{
    private T _value;
    public T Value { get { return _value; } set { _value = value; } }

    public INode ParentNode { get; private set; }
    public ValueConnection<T> Connection { get; set; }
    public INode ConnectionFrom { get { return !IsConnected ? null : Connection.FromNode; } }
    public bool IsConnected { get { return …
Run Code Online (Sandbox Code Playgroud)

c# casting anonymous-methods

0
推荐指数
2
解决办法
799
查看次数