小编Nib*_*Pig的帖子

这是C#中闭包的一个例子吗?

static void Main(string[] args)
{
    var s = 3;

    Func<int, Func<int>> func = 
        x => () =>
    {
        return x;
    };

    var result1 = func(s);

    func = null;

    s = 5;

    var result2 = result1();

    Console.WriteLine(result2);


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

我的理解是x实际上并没有被声明为变量,例如.var x = 3.相反,它被传递给外部函数,后者返回一个返回原始值的函数.在它返回时,它会在x周围创建一个闭包来记住它的值.然后,如果你改变s,它没有任何效果.

这是正确的吗?

(顺便说一下输出是3,我期待).

编辑:这是我认为的原因图

关闭示例

将x = 3传递给func,它返回一个只返回x的函数.但是在内部函数中不存在x,只有它的父元素,并且在我使其为空后它的父元素不再存在.当内部函数运行时,x存储在哪里?它必须从父级创建一个闭包.

进一步澄清:

    int s = 0;

    Func<int, Func<int>> func = 
        x => () =>
    {
        return x;
    };

    for (s = 0; s < 5; s++)
    {
        var result1 = func(s);

        var result2 …
Run Code Online (Sandbox Code Playgroud)

c# closures

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

当它被称为DocumentationController时,MVC控制器给我一个403禁止错误的默认路由

DocumentationController保留给系统使用的东西?

我创建了一个空白的MVC应用程序,创建了一个带有相应视图的DocumentationController.如果我去,它可以工作,www.mysite.com/Documentation/Index但如果我去,www.mysite.com/Documentation/那么我得到403被禁止.

重命名DocumentationController,以Documentation2Controller和相关意见,它(默认路由等)完美的作品.

它是一个保留的关键字还是有其他原因导致它没有获取默认路由?

asp.net-mvc

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

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

如何在VB.NET中使用"Into"LINQ表达式?

我正在转换C#这个LINQ表达式.但是,它似乎不起作用.

C#

 return (from w in fishSticks
         group w by w.FishQty into g
         orderby g.Key descending
         select g).First().First();
Run Code Online (Sandbox Code Playgroud)

VB

Return (From w In fishSticks
        Group w By w.FishQty Into g()
        Order By g.Key Descending
        Select g).First().First()
Run Code Online (Sandbox Code Playgroud)

Visual Studio变成Into gInto g()自己然后给了我这个错误:

在此上下文中无法访问方法"g"的定义.

有任何想法吗?

linq vb.net .net-4.0

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

在ashx文件中,我可以设置返回文件的文件名吗?

我的ashx响应.编写一个返回的简单文本文件.我可以更改文件名,所以如果我的ashx位于mysite.com/someURL,它不会返回someURL.txt而是myFileName.txt吗?

asp.net ashx

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

StringCompace的StringComparison类型的文化是否重要?

在C#中,您可以比较两个字符串String.Equals并提供a StringComparison.

我最近一直在寻找更新我古老的比较方法,ToLower()因为我读到它不适用于所有语言/文化.

从我所知道的,比较的类型来确定订单时,用包含列表面对ae以应首先出现(一些文化不同的东西订购).

有了string.Equals,订购并不重要.因此可以安全地假设许多选项是无关紧要的,只有[Ordinal]和[Ordinal] IgnoreCase很重要?

String.EqualsMSDN文章

comparisonType参数指示比较是应使用当前文化还是不变文化,是否尊重或忽略要比较的两个字符串的大小写,或使用单词或序数排序规则.

string.Equals(myString, theirString, StringComparison.OrdinalIgnoreCase)

我也有兴趣知道sort方法如何在内部工作,它是否用于String.Compare计算两个字符串的相对位置?

c#

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

无法使用带有VS2012的Monogame加载内容

我的代码是

new GameFont(Content.Load<SpriteFont>("LoadingFont"), "LoadingFont")

根据我所读到的,您必须使用VS2010将您的资产编译为.xnb格式,我已经完成了,并将它们放入bin目录中的Content子文件夹,我也做过.但是,我收到错误消息"无法加载LoadingFont资产!".

我不确定还能做什么.我读了一篇很老的帖子说使用XNA 4制作的资产不起作用,但我不知道是否仍然如此,或者如何将我的XNA版本更改为3.1.

有任何想法吗?也许没有使用VS2010会有更好的方法吗?

c# monogame

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

Make Entity Framework使用Contains而不是Like并解释'ESCAPE~'

我有一行LINQ,我在EF中使用它基本上正在做 myTable.Where(c => c.Contains('mystring'));

这是生成的代码:

SELECT TOP (300) 
[Extent1].[ID] AS [ID], 
[Extent1].[FKFishEntityID] AS [FKFishEntityID], 
[Extent1].[Fish] AS [Fish], 
[Extent1].[FishText] AS [FishText], 
[Extent1].[FishType] AS [FishType]
FROM [dbo].[Fish] AS [Extent1]
WHERE [Extent1].[FishText] LIKE @p__linq__0 ESCAPE '~'
Run Code Online (Sandbox Code Playgroud)

我的两个问题是:

  • 如何使用CONTAINS(...)而不是LIKE?当表使用全文索引时,似乎LIKE非常慢.复制和粘贴查询需要4秒才能执行,但如果我将LIKE更改为CONTAINS(),它会立即执行.

  • 为什么要做ESCAPE'〜'?通过复制+粘贴到SQL服务器,如果我删除'ESCAPE'部分,它的执行速度大约快4倍.

c# entity-framework-6

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

在将Int64转换为Int32时,为什么C#让我溢出而没有任何错误或警告?它是如何进行转换的?

这个问题源于一个错误,我迭代了一个集合,Int64并意外地做了foreach (int i in myCollection).我试图调试令人困惑的问题,当我做一个linq查询,i不是一部分myCollection.

这里有一些令我惊讶的代码:

Int64 a = 12345678912345;

Console.Write((int)a);
Run Code Online (Sandbox Code Playgroud)

我希望编译器给我一个错误.通常的一个是隐式演员表不存在.但不,它根本不介意这一点.甚至没有警告!

(int)a偶然的输出值是1942903641.

我很想知道为什么演员在没有任何警告的情况下被允许,以及它是如何产生这个价值的.有任何想法吗?

c#

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

我可以从DataReader创建匿名类型集合吗?

我有这个代码:

var query = "SELECT * FROM Cats";

var conn = new SqlConnection(sqlConnectionString);

conn.Open();

var cmd = new SqlCommand(query);
var reader = cmd.ExecuteReader();

while (reader.Read())
{
    var CatName = reader.GetString(0);
    var CatDOB = reader.GetDateTime(1);
    var CatStatus = reader.GetInt32(2);
}
Run Code Online (Sandbox Code Playgroud)

我想将行拉出到一个匿名类型集合中,我通常使用LINQ进行迭代,但我不确定是否可能由于.Read()每次调用下一行所需的方式.

有没有办法做到这一点?

c# datareader

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