小编one*_*e-t的帖子

Lambda编译失败,引用在"范围"中定义,但未定义

在下面的简单代码段中:

static void Main(string[] args)
{
    Expression<Func<string, bool>> equal = s => s == "test";
    LambdaExpression lambda = Expression.Lambda(equal.Body, Expression.Parameter(typeof(string), "s"));
    lambda.Compile();
}
Run Code Online (Sandbox Code Playgroud)

编译方法失败了 InvalidOperationException

"范围''引用的'System.String'类型的变量'',但未定义".

虽然我发现了其他类似的问题,但我无法理解所提供的答案.

LambdaExpression的DebugView包含:

.Lambda #Lambda1<System.Func`2[System.String,System.Boolean]>(System.String $s) {
    $s == "test"
}
Run Code Online (Sandbox Code Playgroud)

那么,我在这个问题上的其他例子已经看到,参数和使用不匹配,这并不出现在这里是一个问题.我究竟做错了什么?

c# expression-trees

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

在F#中不使用List <List <string >>获取列表列表

我在这里有这个功能:

let ProcessFile (allLines: string list) = 
    let list = new List<List<string>>()

    let rec SplitFile (input: string list) =
        if input.Length <> 0 then
            list.Add(new List<string>(input.TakeWhile(fun x -> x <> "")))
            let nextGroup = input.SkipWhile(fun x -> x <> "").SkipWhile(fun x -> x = "")
            SplitFile (Seq.toList nextGroup)

    SplitFile allLines |> ignore
    list
Run Code Online (Sandbox Code Playgroud)

它将文件的内容作为字符串列表给出,并将每个由空行分隔的组作为单独的列表,给出一个列表列表.

我的问题是,有没有更好的方法来实现这一点,让我有一个像字符串列表一样的东西,而不是我必须使用新的List <List <string >>?因为这对我来说似乎并不特别.

f#

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

C#选择与可选参数和多级继承所期望的方法不同的方法

在给定的示例中(对于代码样式而言,它是为了一个紧凑的自包含repro的兴趣),被调用的方法始终是B中的虚方法,它具有附加的整数参数,而我希望该方法在C将是一个叫做的人.

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

namespace MethodChoosing
{
    class Program
    {
        static void Main(string[] args)
        {
            C c = new C();
            c.M();

            Console.ReadKey();
        }
    }

    public class A
    {
        public virtual void M(bool? a = null)
        {
            Console.WriteLine("base base");
        }
    }

    public class B : A
    {
        public override void M(bool? a = null)
        {
            Console.WriteLine("base override");
        }

        public virtual void M(bool? a = null, int? b = null)
        {
            Console.Write("base new");
        }
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# inheritance optional-parameters

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

列表创建和对象初始值设定项

我正在努力了解下面示例中List发生的事情:

public class DataObject
{
    public List<object> SomeObjects { get; set; }
}

class Program
{
    static void Main(string[] args)
    {

        var dataObj = new DataObject()
                          {
                              SomeObjects = { new object() },
                          };

        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

创建dataOjb显然失败,因为该SomeObjects属性尚未实例化.我假设没有编译错误,因为DataObject可能有一个实例化的构造函数SomeObjects.鉴于此,如果我尝试做类似的事情:

List<int> SomeObjects;
SomeObjects = {1, 2, 3, 4};
Run Code Online (Sandbox Code Playgroud)

这显然不起作用,也不起作用:

List<int> SomeObjects = new List<int>();
SomeObjects = {1, 2, 3, 4};
Run Code Online (Sandbox Code Playgroud)

那么为了得到我的实际问题,在第一个对象初始化器中调用了什么(我已经尝试查找它并且找不到它),为什么它的行为有所不同,还有其它地方可以像这样使用?

c#

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