我刚开始学习网络服务器,特别是龙卷风.
我想写一个带登录功能的简单网页.如Tornado文档中所述,我在用户成功插入后创建了一个安全的cookie:
self.set_secure_cookie("user", self.get_argument("user"))
Run Code Online (Sandbox Code Playgroud)
但是,如何为用户提供注销方式?如前所述,我不熟悉Web服务器,但是当我在用户尝试进入主页时检查此cookie时,我想我只需要在用户按下"注销"后将其删除?
不幸的是,我无法在龙卷风文件中找到任何关于此的信息,也无法在SO上找到.
使用即时窗口时,必须在运行时和设计时之间有所不同.
如果我在设计时使用立即Window并将一个局部变量放在堆栈中:
string s = "test";
Run Code Online (Sandbox Code Playgroud)
VS将启动编译器并在堆上创建一个名为s的新变量,并在设计时使用的临时堆栈帧上放置一个指针.(至少我认为它是如何工作的,至少是简化的.如果我错了,请纠正我)
从现在开始,在运行我的应用程序或关闭VS之前,我无法将s用于其他任何事情:
int s = 12;
A local variable named 's' is already defined in this scope
Run Code Online (Sandbox Code Playgroud)
我可以使用contextmenu清除即时窗口,但这实际上只是清除了窗口本身.我的局部变量仍然留在堆栈中.
我想知道,如果真的没有办法清除我之前在即时窗口中创建的所有变量?
(我使用的是VS 2012 SP1教授,但我猜这个问题与VS的每个版本保持一致)
这可能是一个非常简单的问题,但我在SO上找不到答案,也不知道有人问我答案:
我可以写一个简单的c#方法,如下所示:
private void foo()
{
int a = 1;
int b = 5;
}
Run Code Online (Sandbox Code Playgroud)
如果CIL-Code(由编译器创建)由公共语言运行时执行,它将在堆栈顶部创建以下字段,而执行控件在方法内:
b = 5
a = 1
Run Code Online (Sandbox Code Playgroud)
但是现在,我扩展了Method来访问名为"a"的字段:
private void foo()
{
int a = 1;
int b = 5;
Console.WriteLine(a);
}
Run Code Online (Sandbox Code Playgroud)
现在CLR必须访问不在堆栈顶部的字段,但根据FILO(先进先出)原则,它必须在访问之前处理请求字段之上的所有字段.
名为"b"的字段会在请求字段"a"上方的堆栈上发生什么?
CLR无法删除它,因为之后执行方法可能会使用它,那么会发生什么呢?
AFAIK,只有两种方法来存储字段,堆栈或堆.将它移到堆中将没有多大意义,因为这将从CLR堆叠中获得所有好处.CLR是否会创建类似第二个堆栈的东西?
这是如何工作的?
-编辑-
也许我没有清楚地解释我的意图.
如果我写一个像这样的方法:
private void foo()
{
int a = 1;
int b = 5;
Console.WriteLine(a);
Console.WriteLine(b);
}
Run Code Online (Sandbox Code Playgroud)
CLR首先在堆栈上写入2个字段,然后以相反的顺序访问它们.
首先,它必须访问字段"a",但为了达到它,CLR必须处理位于堆栈上字段"a"之上的字段"b".它不能从堆栈中删除字段"b",因为它必须在之后访问它.
这是如何运作的?
我在VS2012安装中发现了一个奇怪的行为.我使用VS2012 Pro和ReSharper 7. Intellisense不再显示代码建议.我在研究中发现了一些相关的问题,但是它们的设置总是略有不同,没有一个可以解决我的问题:
Intellisense正在运行,但它不再显示tooltip所选成员函数/属性.
如果我看一下C#文本编辑器设置
Tools -> Options -> Text Editor -> C# -> General
Run Code Online (Sandbox Code Playgroud)
大多数情况下,选择了两个必要的框Auto List Members和Parameter Information.但是,Intellisense中的代码建议不起作用.有时,当我查看所描述的设置时,它们是未被选中的.
选择它们将使代码建议像VS2010一样工作,但只能执行一次.当我之后检查设置时,它们很可能仍然被选中,但代码建议不再起作用.
有人建议删除%AppData%\Roaming\Microsoft\VisualStudio\11.0文件夹,这对我不起作用.我也尝试重置所有更改,这也没有任何帮助.
Tools -> Import and Export Settings -> Reset
Run Code Online (Sandbox Code Playgroud)
世界上有什么东西可以让Visual Studio 忘记它的设置并触发这种不合理的行为?
-编辑-
我按下CTRL+ Alt+ 显示代码建议Space.但是,每次我想看到这些建议时,我都必须按下该快捷方式.必要时,必须每次都能自动显示它们吗?
我想在.net 4.5上使用ASP.net WebApi创建一个REST Web服务
网址应采用以下格式:
/values?Age=55&Height=176&Race=1&Weight=80&Gender=male&id=800001
Run Code Online (Sandbox Code Playgroud)
关联的控制器如下所示:
[HttpGet]
public string Get(int id, [FromUri]Demographics demographics)
{ // etc.}
Run Code Online (Sandbox Code Playgroud)
人口统计数据是一个自定义对象,基本上只是具有某些属性的DTO.但是,它包含一个具有自定义枚举类型的属性:
enum Gender
{
Female = 0,
Male
}
Run Code Online (Sandbox Code Playgroud)
如果URL是上述格式,则默认映射可以正常工作.但是,当然我还需要检查url提供的参数是否正确.
ASP.net WebApi(afaik)默认尝试根据假定的类型映射每个参数(或者如果它可以转换为该类型).如果它在URI中找不到匹配的值,则假设它只是0.
现在,这将我带到一个非常不幸的情况,根据定义,0仍然是Gender Demographics.Gender(0~Meminual.Female)的有效值.
最简单的解决方案是更改枚举,使0成为我可以检查的"不确定"状态.但是,我无法改变枚举.我可以为Demographics对象创建自己的重载但不愿意这样做,因为我认为必须有一个更好的方法.
我可以明确地将性别参数绑定到URI中的参数,并在未提交时抛出异常吗?
我读到了类型转换器,但我必须处理URI字符串,并认为我必须实现WebApi显然已经具有的很多功能.
请记住,我必须处理URI,不能使用请求正文.
使用 MSTest 编写 UnitTests 我想断言返回值与我期望的返回值的相等性。
预期类型是一种自定义类型,既不实现IComparable接口也不实现IEquatable接口,这就是为什么我想提供Assert.AreEqual比较两个对象的可能性。
我知道这种可能性存在于CollectionAssert.AreEqual. 然而,这种方法需要两个继承ICollection我的对象没有的对象。
为什么Assert.AreEqual不允许我指定自定义比较器?我错过了什么吗?
在我的Visual Studio 2010 Ultimate安装中,当我将鼠标悬停在成员上并点击标准的VS Info对话框时,有一项功能将显示扩展的信息.这将导致此窗口:

如您所见,我点击的类/成员有很多信息(在本例中为String).
这是VS 2010 Ultimate的标准功能还是带有扩展功能?有谁知道VS 2012(专业版)中支持此功能的扩展?
我目前离家,但我的工作笔记本电脑.在它上面,我有一个我创建的Git仓库,因为我是唯一真正对这个特定项目做任何事情的人.
我分享了这个文件夹,并让我的同事有权将git repo克隆到他的机器上(作为一个远程分支)
他现在需要我最近的改变,通常他会做一个git pull.这是不可能的,因为我现在没有VPN,他无法通过不安全的渠道连接.
有没有办法导出回购(并将其托管在网络上的某处加密),以便他可以下载,解压缩并导入它?我希望结果没有差异,就好像我们正常工作一样.在我重返工作岗位后,我们也必须能够继续共同努力.
-edit-我应该补充一点,回购目前非常小
我在WinForms中,在保存对DataBase的更改之前,我必须检查使用的ErrorProvider是否为任何显示的控件保留错误.
我想出了几种方法可以做到这一点:
一个简单的foreach循环在ControlContainer上:
foreach (Control c in ctrlcontainer)
{
if (epOrderHeader.GetError(c) != string.Empty)
{
return true;
}
}
return false;
Run Code Online (Sandbox Code Playgroud)使用List扩展方法Exists(谓词):
return(ctrlcontainer.Exists(c => epOrderHeader.GetError(c)!= string.Empty);
从胃口开始,我预计第二个是最快的,但是使用我发现的Eqatec Profiler,foreach循环稍微快一些(在我的情况下大约1ms).虽然这是微不足道的,但我仍然想知道为什么会这样?
编译器如何翻译这些方法,为什么第一个更快?
我有一个带泛型参数的方法:
internal void DoSomething<T>(T workWithThis)
{
}
Run Code Online (Sandbox Code Playgroud)
我现在想要限制此方法只接受继承我想指定的几个接口之一的参数.但是我还没有找到办法.我想要的是这样的:
internal void DoSomething<T>(T workWithThis) where T : ISomething | ISomethingElse
{
}
Run Code Online (Sandbox Code Playgroud)
显然这不起作用,所以我尝试用静态方法来检查T的类型:
public static bool CheckType(Type t)
{
return */check here*/
}
internal void DoSomething<T>(T workWithThis) where T : CheckType(typeof(T))
{
}
Run Code Online (Sandbox Code Playgroud)
显然,这也无济于事.问题是为什么?为什么编译器阻止我这样做,根据我的理解,它没有理由不能工作
c# ×6
.net ×2
asp.net ×1
cil ×1
clr ×1
cookies ×1
generic-list ×1
generics ×1
git ×1
git-remote ×1
heap ×1
icomparable ×1
intellisense ×1
loops ×1
mstest ×1
python ×1
resharper ×1
stack ×1
tornado ×1
unit-testing ×1