标签: anonymous-methods

在成员初始化程序中不能使用'this'吗?

这合法吗?它是否包含隐藏的错误或缺陷?Visual Studio不会给出任何错误或警告,但ReSharper会:

/// <summary>
/// immutable tuple for two
/// </summary>
public class Pair<TValue1, TValue2> : Singleton<TValue1>
{
    public TValue2 Value2 { get; private set; }
    public Pair(TValue1 value1, TValue2 value2, Func<Pair<TValue1, TValue2>, String> toStringFunc)
        : this(value1, value2, () => toStringFunc(this)) { } //Red light

}2> : Singleton<TValue1>
Run Code Online (Sandbox Code Playgroud)

c# lambda anonymous-methods

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

如何在匿名方法中打破WinDbg?

标题有点说明了一切.通常的SOS命令!没有名字,bpmd没有很多好处.

我有一些想法:

  • 转储每个方法,然后在找到相应的MethodDesc时 使用!bpmd -md
    • 从我所知道的,在现实世界的使用中不实用.即使我写了一个宏来限制转储到匿名类型/方法,也没有明显的方法来区分它们.
  • 使用Reflector转储MSIL名称
    • 在处理动态程序集和/或Reflection.Emit时没有帮助.Visual Studio无法在这种情况下阅读本地变量,这是我首先转向Windbg的全部原因......
  • 在VS中设置断点,等待它击中,然后使用非侵入性技巧更改为Windbg
    • 试图从VS分离导致它挂起(与应用程序一起).我认为这是因为托管调试器是通过线程注入而不是标准"硬"调试器的"软"调试器.或者它可能只是Silverlight特有的VS错误(几乎不是我遇到过的第一个).
  • 在已知调用匿名方法的其他位置设置断点,然后单步进入
    • 我的备份计划,但如果这个Q&A揭示了一个更好的方法,我宁愿不诉诸它

c# debugging windbg anonymous-methods sos

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

Delphi匿名方法 - 赞成和利弊.在Delphi中使用闭包(anonymus方法)时的良好实践

我的团队中有一位同事在Delphi开发的项目中广泛使用了闭包.个人,我不喜欢这个,因为是使代码难于阅读,我认为,只有当你需要他们倒闭应该被使用.

在另一方面,我读过有人可以向我解释匿名方法吗?和其他相关的链接,这一点,我在考虑,也许我错了,所以我要你给我一些例子时,最好改为使用"老时尚"的方式关闭的(不使用闭包).

delphi closures anonymous-methods

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

lambda表达式如何在内部工作?

在查找这个问题的答案时:" 为什么在匿名方法中不允许使用out参数? "我对lambda表达式和匿名方法实际上如何工作有点遗憾.

在评论中,JaredPar声称"想象一下,例如out参数引用堆栈上的局部变量.lambda可以在将来的任意点执行,因此可以在堆栈帧不再有效时执行".

我指出,如果不是任何其他变量的情况......这基本上让我想知道我对lambda表达式的真正了解.

我想到的是这样的事情:

public void Foo(ComplexObject val, out SomeDelegate outDelegate)
{
  ComplexObject obj = new ComplexObject(val)
  SomeDelegate = delegate(int other) { return (obj.value * other); }  
}

public void Bar()
{
  SomeDelegate MyDel = null;
  Foo(5, out MyDel);
  int finalRes = MyDel(100);
  // Whatever
}
Run Code Online (Sandbox Code Playgroud)

在那种情况下,我真的不知道发生了什么.obj是堆栈上的引用,它在方法返回时不再有效,因此匿名方法应该能够(如果可行)实际知道它是引用类型并复制引用而不是值,如果它...如果"用例"或多或少相同,为什么不参考params工作呢?

c# lambda anonymous-methods

7
推荐指数
2
解决办法
3543
查看次数

是否可以在Objective-C中定义匿名选择器?

我希望能够定义一个内联匿名选择器,选择器只需要一个选择器作为参数.

这是可能的,还是我必须吮吸它并定义一个方法?

背景:在我的iPhone应用程序中,我需要从另一个线程更新我的UI.要做到这一点,我使用performSelectorOnMainThread:withObject:waitUntilDone:但是,我希望能够获得此功能,而无需定义整个其他方法.

iphone objective-c anonymous-methods selector

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

在匿名方法中使用MethodInfo.GetCurrentMethod()

public static void Main(string[] args)
{
    Action a = () => Console.WriteLine(MethodInfo.GetCurrentMethod().Name);
    a();
}
Run Code Online (Sandbox Code Playgroud)

这段代码将返回一个不起眼的字符串,如下所示:<Main>b__0.

有没有办法忽略匿名方法并获得更易读的方法名称?

.net c# reflection anonymous-methods

7
推荐指数
2
解决办法
4121
查看次数

可选的匿名方法

我想公开一个可以采用可选匿名方法的函数:

    type
      TParamsProc = reference to procedure(Params: TSQLParams);
      TFieldsProc = reference to procedure(Fields: TSQLResult);

      TDbController = class
        ...
      public
        procedure Select(const SQL: sting; ParamsProc: TParamsProc; FieldsProc: TFieldsProc);
      end;

    implementation

    procedure TDbController.Select(const SQL: sting; ParamsProc: TParamsProc; FieldsProc: TFieldsProc);
    var
      Q: TUIBQuery;
    begin
      Q := TUIBQuery.Create(nil);
      try
        Q.Database := FDatabase;
        Q.Transaction := FTransaction;
        Q.SQL.Text := SQL;
        ParamsProc(Q.Params);
        Q.Open;
        while not Q.Eof do
        begin
          FieldsProc(Q.Result);
          Q.Next;
        end;
      finally
        Q.Free;
      end;
    end;
Run Code Online (Sandbox Code Playgroud)

有时我没有传递给SQL查询的参数,我想让ParamsProc可选.

这段代码不起作用:

      if ParamsProc <> nil then ParamsProc(Q.Params);
Run Code Online (Sandbox Code Playgroud)

也不是这个:

      if @ParamsProc <> …
Run Code Online (Sandbox Code Playgroud)

delphi anonymous-methods delphi-2010

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

如何在Free Pascal中使用匿名方法?

我尝试使用Delphi的匿名方法语法:

type
    fun = reference to function(): Integer;
Run Code Online (Sandbox Code Playgroud)

Fpc显示语法错误:

Error: Identifier not found "reference"
Run Code Online (Sandbox Code Playgroud)

什么是免费Pascal相当于Delphi的匿名方法,如果有的话?

delphi lambda closures freepascal anonymous-methods

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

"初始化"部分中匿名方法的奇怪错误

此单元无法在XE2 Update 3中编译,并显示错误"内部错误:SY6315".在XE中没有这样的问题.

unit Test;

interface

uses
  SysUtils;

var
  Proc: TProc;

implementation

initialization
   Proc := procedure
    var ByteArr: array of Byte;
    begin
      SetLength(ByteArr, 10);
    end;

end.
Run Code Online (Sandbox Code Playgroud)

有没有人有这个问题的经验?

更新:我已提交质量控制报告:QC#102888.

delphi anonymous-methods

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

(_)=> DoWork(); 下划线如何作为匿名委托参数有效?

关于立即启动计时器的一个很好的答案,我可以看到以下代码:

    timer.Elapsed += timer_Elapsed;
    ThreadPool.QueueUserWorkItem((_) => DoWork());
...

void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
    DoWork();
}

void DoWork() {
    // etc...
}
Run Code Online (Sandbox Code Playgroud)

我自己尝试了,我碰到了这一行,我认为匿名委托构造中有一个错字:

                                What?
                                  |
                                  V
    ThreadPool.QueueUserWorkItem((_) => DoWork());
Run Code Online (Sandbox Code Playgroud)

哪个隐藏规则使得下划线"_"可以作为匿名委托中的参数名称接受?

c# delegates anonymous-methods

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