标签: anonymous-methods

为什么我尝试修剪List <string>中的字符串似乎不起作用?

我在LINQPad中尝试了以下代码并获得了以下结果:

List<string> listFromSplit = new List<string>("a, b".Split(",".ToCharArray())).Dump();
listFromSplit.ForEach(delegate(string s) 
{ 
  s.Trim(); 
});
listFromSplit.Dump();
Run Code Online (Sandbox Code Playgroud)

"a"和"b"

所以字母b没有像我期待的那样去掉白色空间......?

有人有主意吗

[注意:.Dump()方法是LINQPad中的扩展方法,它以一种漂亮的智能格式打印出任何对象的内容]

foreach anonymous-methods generic-list

5
推荐指数
2
解决办法
6715
查看次数

匿名方法,范围和序列化

假设我有以下代码:

public class Foo
{
    private int x;
    private int y;

    public Bar CreateBar()
    {
        return new Bar(x, () => y);
    }
}

[Serializable]
public class Bar
{
    private int a;
    private Func<int> b;

    public Bar(int a, Func<int> b)
    {
        this.a = a;
        this.b = b;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,对象和值的范围会发生什么?由于x是值类型,因此它将按值传递给Bar,因此,不需要对其范围进行任何操作.但是y会发生什么?当实际评估b时,y的值需要保持不变.是不是所有的Foo都会在以后评估y?我只能假设Foo不是GC.

现在让我们说我们将Bar序列化为磁盘,然后再对其进行反序列化.什么实际上被序列化?它是否也将Foo序列化?是什么魔法发生了以便在反序列化后可以评估b?你能解释IL中发生的事情吗?

c# delegates scope anonymous-methods

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

为什么一个Func有效而另一个(几乎相同)没有

private static Dictionary<Type, Func<string, object>> _parseActions 
                                   = new Dictionary<Type, Func<string, object>>
    {
        { typeof(bool), value => {Convert.ToBoolean(value) ;}}
    };
Run Code Online (Sandbox Code Playgroud)

以上给出了错误

错误14并非所有代码路径都返回类型为'System.Func <string,object>'的lambda表达式中的值

但是下面的确如此.

private static Dictionary<Type, Func<string, object>> _parseActions 
                                   = new Dictionary<Type, Func<string, object>>
    {
        { typeof(bool), value => Convert.ToBoolean(value) }
    };
Run Code Online (Sandbox Code Playgroud)

我不明白两者之间的区别.我认为example1中的额外大括号是允许我们在anon函数中使用多行,那么为什么它们会影响代码的含义呢?

delegates function anonymous-methods c#-3.0

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

如何实现比较器来比较名称?

我需要在我的学生类中实现一个静态方法

public static Comparator<Student> getCompByName()
Run Code Online (Sandbox Code Playgroud)

它为 Student 返回一个新的比较器对象,该对象通过属性“name”比较 2 个 Students 对象。

我创建了我认为正确的东西,但我不确定它是否会像上面给出的要求那样发挥作用。我对比较器很陌生,并且很难使用它们。

public static Comparator<Student> getCompByName()
{

 Comparator comp = new Comparator<Student>(){
     @Override
     public int compare(Student s1, Student s2)
     {
        return Integer.compare(s1.name.length(), s2.name.length());
     }

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

仅通过阅读上述要求,我不确定我应该比较“名称”的内容,是否是长度,是否相等等等。所以我投入了整数比较。任何人都清楚需要什么以及我是否正确地做到了这一点?如果没有,有人可以让我知道我需要做什么/改变吗?

java anonymous-methods anonymous-class comparator

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

方法和匿名类型

我知道你不能从方法中返回匿名类型,但我想知道Select扩展方法如何返回匿名类型.它只是一个编译技巧吗?

编辑

假设L是一个列表.这是如何运作的?

L.Select(s => new { Name = s })
Run Code Online (Sandbox Code Playgroud)

返回类型是IEnumerable <'a>其中'a = new {String Name}

c# extension-methods anonymous-methods anonymous-types

4
推荐指数
3
解决办法
4404
查看次数

如何取消注册匿名处理程序?

C#2.0有一个称为匿名函数的简洁功能.这主要用于事件:

Button.Click += delegate(System.Object o, System.EventArgs e)
                   { System.Windows.Forms.MessageBox.Show("Click!"); };
Run Code Online (Sandbox Code Playgroud)

现在,假设Button是一个静态成员,那么向其添加委托将被视为非托管资源.通常,我必须在再次对其进行regestring之前取消注册该处理程序.这是GUI编程的一个非常常见的用例.

匿名函数有哪些指导原则?框架是否自动取消注册?如果是的话,何时?

.net c# events anonymous-methods

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

谓词<int>匹配问题

我不明白以下代码是如何工作的.具体来说,我不明白使用"return i <3".我希望返回i如果它<小于3.我总是认为返回只返回值.我甚至找不到它的语法.

第二个问题,在我看来,使用匿名方法(委托(int i))但是可以用普通委托指向方法else来编写它吗?谢谢

List<int> listOfInts = new List<int> { 1, 2, 3, 4, 5 };
List<int> result =
    listOfInts.FindAll(delegate(int i) { return i < 3; });
Run Code Online (Sandbox Code Playgroud)

c# syntax predicate anonymous-methods

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

TList <TProc>.清除所有捕获的变量吗?

当我有一个TList(所以,一个"程序参考"列表),并且我清除它时,匿名方法中使用的所有捕获变量都会被释放,所以不会发生泄漏吗?

IE浏览器.是清除TList时有效的引用计数?

delphi anonymous-methods

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

我对匿名方法类型使用什么通用约束?

我想声明一个通用记录,如下所示:

type
  TMyDelegate<T: constraint> = record
  private
    fDelegate: T;
  public
    class operator Implicit(a: T): TMyDelegate;
    class operator Implicit(A: TMyDelegate: T);
  end;
Run Code Online (Sandbox Code Playgroud)

我想限制Treference to procedure/function.(越多越好).

我试过这个,但它没有编译:

program Project3;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

type

  TProc1 = reference to procedure(a: Integer);
  TProc2 = reference to procedure(b: TObject);

  TTest<T: TProc1, TProc2> = record
  private
    fData: T;
  public
    class operator Implicit(a: T): TTest<T>;
    class operator Implicit(a: TTest<T>): T;
  end;

  { TTest<T> }

class operator TTest<T>.Implicit(a: T): TTest<T>;
begin
  Result.fData:= …
Run Code Online (Sandbox Code Playgroud)

delphi generics anonymous-methods

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

如何将ValueTuple命名功能与匿名方法一起使用?

我想使用ValueTuple的命名功能如下:

     IEnumerable<(string, char, int)> valueTuples = new(string, char, int)[]
     {
        ("First", '1', 1),
        ("Second", '2', 2),
        ("Third", '3', 3)
     };

     var projection1 = valueTuples.Select(((string s, char c, int i) tuple) => tuple.i);
Run Code Online (Sandbox Code Playgroud)

但它不会编译错误消息,这不是很有帮助.然而这些都编译:

     var projection2 = valueTuples.Select(tuple => tuple.Item1);

     var projection3 = valueTuples.Select(((string, char, int) tuple) => tuple.Item1);
Run Code Online (Sandbox Code Playgroud)

尝试更直接的方法,这不编译BUT提供更有帮助的错误消息:

     var projection4 = Enumerable.Select(
        valueTuples, ((string s, char c, int i) tuple) => tuple.i);
Run Code Online (Sandbox Code Playgroud)

这导致尝试这个,编译:

     var projection5 = Enumerable.Select<(string, char, int), int>(
        valueTuples, ((string s, char c, int i) tuple) => …
Run Code Online (Sandbox Code Playgroud)

c# ienumerable anonymous-methods valuetuple

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