标签: anonymous-methods

c# Action<T> 如何处理匿名方法

我最近自己探索了 c#。但一直被这个问题困扰。

所以我有一个方法 dbExec

public void dbExec(Action<OleDbCommand> func)
{
    using (var conn = new OleDbConnection(connStr))
    {
        conn.Open();
        var cmd = conn.CreateCommand();
        func(cmd); 
    }
}
Run Code Online (Sandbox Code Playgroud)

代表,

public delegate void DelCmd(OleDbCommand cmd);
Run Code Online (Sandbox Code Playgroud)

和另一种方法:

public ICollection<string> CheckUserPermissions() 
{
    List<string> logins = new List<string>();
    DelCmd delCmd = delegate(OleDbCommand cmd)
    {
        cmd.CommandText = "SELECT PERMISSIONS.LOGIN FROM PERMISSIONS";
        using (var rdr = cmd.ExecuteReader()) while (rdr.Read()) logins.Add(rdr["LOGIN"].ToString());  
    };
    dbExec(delcmd);
    return logins;
} 
Run Code Online (Sandbox Code Playgroud)

声明的问题dbExec(delcmd);。错误是“delcmd 在当前上下文中不存在”。如何将匿名方法作为参数传递给另一个带有 Action 声明参数的方法?

c# lambda delegates action anonymous-methods

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

C#中的递归和匿名方法

美好的一天.我在TreeView中有递归遍历TreeNode的方法:

public void ShowTree(TreeView tree)
{
    foreach (TreeNode node in tree.Nodes)
    {
        ShowNode(node);
    }
}

private void ShowNode(TreeNode node)
{
    MessageBox.Show(node.ToString());
    foreach (TreeNode child in node.Nodes)
    {
        ShowNode(child);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我必须有多余的方法"ShowNode",这在其他任何地方都没有使用.如何制作这种匿名方法并合并这两种方法?

c# treeview recursion anonymous-methods

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

在C#中编写匿名函数的推荐方法是什么?

var seq = Enumerable.Range(1, 10).Reverse();
var sort1 = seq.OrderBy(i => i);
var sort2 = seq.OrderBy(delegate(int i) { return i; });
Run Code Online (Sandbox Code Playgroud)

我认为sort2更明确但排序1更短.除此之外,我真的不知道其中的区别.这样做的推荐方法是什么?

c# syntax lambda anonymous-methods

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

过早的弦破坏以及如何避免它?

我正在使用Delphi 2009并使用以下代码段获得一些奇怪的错误:

var
  Str     : AnsiString;
  CharPtr : PAnsiChar;
...
CharPtr := PAnsiChar (Str);
ExecuteInBackgroundThread (
  procedure
  begin
  DoSomething (CharPtr);
  end);
Run Code Online (Sandbox Code Playgroud)

我猜测字符串在超出范围时会被破坏,并且在某些时间条件下,DoSomething会产生最奇怪的结果.所以第一个问题是:我是对的吗?

第二个问题是:我如何规避被破坏的字符串?这样做的正确方法是什么?

提前致谢.

delphi multithreading anonymous-methods delphi-2009

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

是什么让这个计时器在范围内?匿名方法?

好,

所以当有人在Silverlight应用程序中点击我们的Icon时,我会有一个触发方法,如下所示:

    private void Logo_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        e.Handled = true;
        ShowInfo(true);

        DispatcherTimer autoCloseTimer = new DispatcherTimer();
        autoCloseTimer.Interval = new TimeSpan(0, 0, 10);
        autoCloseTimer.Tick +=new EventHandler((timerSender,args) => 
            {
                autoCloseTimer.Stop();
                ShowInfo(false);
            });
        autoCloseTimer.Start();
    }
Run Code Online (Sandbox Code Playgroud)

什么意思发生的是ShowInfo()方法打开一个公司信息输入框,调度计时器在所述时间跨度后自动关闭它.这一切都有效......

但是我不确定的是因为调度计时器是本地var,在Logo_MouseLeftButtonUp方法完成之后,在匿名方法被触发之前,有什么能够保持调度计时器被引用并且不能用于GC集合?

它是匿名方法中ShowInfo()方法的引用吗?

只是觉得我应该更深入地了解一些事情,因为我可以想象使用事件等,这样就可以很容易地创建漏洞.

希望这一切都有意义!

安迪.

c# events garbage-collection anonymous-methods

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

将Linq/Lambda表达式转换为匿名方法

我经常得到使用lambda表达式的代码示例.我仍然使用.net 2.0,并且发现很难使用这样的代码,例如

foreach(var item in items)
{
    var catCopy = item;
    foreach(var word in words)
    {
        var wordCopy = word;
        var waitCallback = new WaitCallback(state =>
        {
            DoSomething(wordCopy, catCopy);
        });

        ThreadPool.QueueUserWorkItem(waitCallback);
    }
}
Run Code Online (Sandbox Code Playgroud)

我如何将这种表达式转换为任何替代方法(即非lambda代码或匿名方法)?

谢谢

.net linq lambda anonymous-methods

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

使用委托的条件分配

我想分配给这样的数据表.

如果datatable为null,则创建一个新的数据表,否则清除数据表

我写的代码

datatable= (datatable== null) ? 
   new DataTable() :  
  delegate(){datatable.Clear(); return datatable;});
Run Code Online (Sandbox Code Playgroud)

如何使用委托或匿名方法实现这一目标?尽可能使用最短的代码.

c# delegates anonymous-methods

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

代表声明中有正文意味着什么?

我刚刚看到以下代码:

class X
{
  static Action Ac()
  {
     return ..some other code
  }
}
Run Code Online (Sandbox Code Playgroud)

这是什么意思?我从未见过声明其身体的代表.

c# delegates anonymous-methods

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

匿名方法消耗内存吗?

在您的计算机上执行匿名方法,代理,操作,功能等,分配/消耗/吃内存?

如果是这样,他们是否在捕获的代码块上的每个变量上分配相同的内存?

c# delegates anonymous-methods

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

为什么我不能在匿名方法中使用while循环中的break?

为什么我不能break;while循环中使用语句,而在匿名方法中?

当我收到这个错误时,我正在处理这段代码(下面):" Control cannot leave the body of an anonymous method or lambda expression".

值得庆幸的是,我可以通过使用return;来解决问题,但我仍然想知道为什么我不能使用break;.对我来说,两个语句之间的主要区别在于return;退出方法,并break;退出最进一步的嵌套循环.

我的代码,

while (someCondition)
{
    System.Threading.Thread.Sleep(500);

    Application.Current.Dispatcher.Invoke(new Action(() =>
    {
        if (someOtherCondition)
        {
            // Do stuff...
        }
        else
        {
            if (anotherCondition)
            {
                break;
            }

            // Do something else...
        }
    }));
}
Run Code Online (Sandbox Code Playgroud)

c# loops anonymous-methods break while-loop

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