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) 是DocumentationController保留给系统使用的东西?
我创建了一个空白的MVC应用程序,创建了一个带有相应视图的DocumentationController.如果我去,它可以工作,www.mysite.com/Documentation/Index但如果我去,www.mysite.com/Documentation/那么我得到403被禁止.
重命名DocumentationController,以Documentation2Controller和相关意见,它(默认路由等)完美的作品.
它是一个保留的关键字还是有其他原因导致它没有获取默认路由?
我正在转换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 g了Into g()自己然后给了我这个错误:
在此上下文中无法访问方法"g"的定义.
有任何想法吗?
我的ashx响应.编写一个返回的简单文本文件.我可以更改文件名,所以如果我的ashx位于mysite.com/someURL,它不会返回someURL.txt而是myFileName.txt吗?
在C#中,您可以比较两个字符串String.Equals并提供a StringComparison.
我最近一直在寻找更新我古老的比较方法,ToLower()因为我读到它不适用于所有语言/文化.
从我所知道的,比较的类型来确定订单时,用包含列表面对aé并ae以应首先出现(一些文化不同的东西订购).
有了string.Equals,订购并不重要.因此可以安全地假设许多选项是无关紧要的,只有[Ordinal]和[Ordinal] IgnoreCase很重要?
comparisonType参数指示比较是应使用当前文化还是不变文化,是否尊重或忽略要比较的两个字符串的大小写,或使用单词或序数排序规则.
string.Equals(myString, theirString, StringComparison.OrdinalIgnoreCase)
我也有兴趣知道sort方法如何在内部工作,它是否用于String.Compare计算两个字符串的相对位置?
我的代码是
new GameFont(Content.Load<SpriteFont>("LoadingFont"), "LoadingFont")
根据我所读到的,您必须使用VS2010将您的资产编译为.xnb格式,我已经完成了,并将它们放入bin目录中的Content子文件夹,我也做过.但是,我收到错误消息"无法加载LoadingFont资产!".
我不确定还能做什么.我读了一篇很老的帖子说使用XNA 4制作的资产不起作用,但我不知道是否仍然如此,或者如何将我的XNA版本更改为3.1.
有任何想法吗?也许没有使用VS2010会有更好的方法吗?
我有一行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倍.
这个问题源于一个错误,我迭代了一个集合,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.
我很想知道为什么演员在没有任何警告的情况下被允许,以及它是如何产生这个价值的.有任何想法吗?
我有这个代码:
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# ×6
.net-4.0 ×1
ashx ×1
asp.net ×1
asp.net-mvc ×1
closures ×1
datareader ×1
linq ×1
monogame ×1
sql-server ×1
vb.net ×1