Tag: C#的

decltype行为的基本原理是什么?

正如我在C ++ 11中所理解的, decltype(expression)用于推导给定expression式的完全相同types。 但是当expression式本身被放入括号中时,则推导types是左值对expression式types的引用 。 例如: int x; decltype(x) y = x; 相当于int y = x; 但, int x; decltype((x)) y = x; 相当于int& y = x; 。 分别 decltype(auto) f1() { int x = 0; return x; // decltype(x) is int, so f1 returns int } 但 decltype(auto) f2() { int x = […]

Razor:方法'Write'没有超载需要0个参数

@{ int i = 4; } @foreach (string s in "1,2,3".Split(',')) { @:s is equal to @s @{ i++; } } 我得到了“方法没有重载”写@“0”参数在@ {i ++; }代码行。 有什么想法吗? 谢谢!

实际的例子使用dup或dup2

我知道dup或dup2做什么,但我不知道什么时候可以使用。 任何实际的例子? 谢谢。

在ASP.NET Core中访问当前的HttpContext

我需要访问静态方法或实用程序服务中的当前HttpContext 。 使用传统的ASP.NET MVC和System.Web ,我只是使用HttpContext.Current静态地访问上下文。 但是,如何在ASP.NET Core中执行此操作?

这是一个在C中释放内存的好方法吗?

释放struct Foo实例的函数如下所示: void DestroyFoo(Foo* foo) { if (foo) free(foo); } 我的一位同事build议改为: void DestroyFoo(Foo** foo) { if (!(*foo)) return; Foo *tmpFoo = *foo; *foo = NULL; // prevents future concurrency problems memset(tmpFoo, 0, sizeof(Foo)); // problems show up immediately if referred to free memory free(tmpFoo); } 我看到释放后将指针设置为NULL更好,但我不确定以下内容: 我们是否真的需要将指针分配给临时指针? 它在并发和共享内存方面有帮助吗? 将整个块设置为0以强制程序崩溃或至less输出有显着差异的结果是一个好主意吗? 提前致谢!

为什么开关语句上的奇怪的缩进?

为什么imho缺less“case”的缩进 – switch语句中的关键字被认为是很好的样式? 在每个IDE中,“case”关键字的缩进看起来都不是默认的格式化选项: switch (i){ case 0: break; case 1: break; } 而我觉得这个格式更直观: switch (i){ case 0: break; case 1: break; } 这背后有一些逻辑,这避开了我吗?

场与财产。 性能优化

请注意这个问题只与性能有关。 让我们跳过devise指南,哲学,兼容性,可移植性以及任何与纯粹性能无关的东西。 谢谢。 现在的问题。 我一直认为,因为C#getters / setter实际上是伪装的方法,所以阅读public字段必须比调用getter更快。 所以要确保我做了一个testing(下面的代码)。 但是, 如果您在Visual Studio中运行该testing,则此testing只会产生预期的结果(即字段比34%的获得者更快 )。 一旦你从命令行运行它显示几乎相同的时间… 唯一的解释可能是CLR做了额外的优化(纠正我,如果我在这里是错的)。 我不相信在实际的应用中,这些属性以更复杂的方式被使用,它们将以相同的方式被优化。 请帮助我certificate或反驳现实生活中属性比田野慢的观点。 问题是 – 我应该如何修改testing类来使CLR更改行为,使公共领域超越获取者。 或者告诉我,没有内部逻辑的任何属性将会像字段一样执行(至less在getter上) 编辑:我只谈论版本x64构build。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.Runtime.InteropServices; namespace PropertyVsField { class Program { static int LEN = 20000000; static void Main(string[] args) { List<A> a = new List<A>(LEN); List<B> […]

C ++:在函数/方法声明中和号“&”和星号“*”之间的区别?

那些之间有一些微妙的区别: void a1(float &b) { b=1; }; a1(b); 和 void a1(float *b) { (*b)=1; }; a1(&b); ? 它们都是一样的(或者看起来像main()),但是第一个显然更短,但是我看到的大部分代码都使用第二个符号。 有区别吗? 也许万一它是一些对象,而不是浮动?

M_PI适用于math.h,但不适用于Visual Studio中的cmath

我正在使用Visual Studio 2010.我已经阅读了C ++,最好使用<cmath>而不是<math.h> 。 但在我正在编写的程序(Win32控制台应用程序,空项目),如果我写: #define _USE_MATH_DEFINES #include <math.h> 它编译,而如果我写 #define _USE_MATH_DEFINES #include <cmath> 它失败了 错误C2065:'M_PI':未声明的标识符 这是正常的吗? 如果我使用cmath或math.h,这有什么关系吗? 如果是的话,我怎样才能使用cmath工作? 更新 :如果我在GUI中定义_USE_MATH_DEFINES,它将起作用。 任何线索为什么发生这种情况?

使用Web API返回匿名types

使用MVC时,返回adhoc Json很容易。 return Json(new { Message = "Hello"}); 我正在寻找这个新的Web API的function。 public HttpResponseMessage<object> Test() { return new HttpResponseMessage<object>(new { Message = "Hello" }, HttpStatusCode.OK); } 这会引发一个exception,因为DataContractJsonSerializer无法处理匿名types。 我用这个基于Json.Net的JsonNetFormatter取代了这个。 这个如果我使用的话 public object Test() { return new { Message = "Hello" }; } 但是如果我没有返回HttpResponseMessage ,我就没有看到使用Web API的意义,我最好坚持使用vanilla MVC。 如果我尝试使用: public HttpResponseMessage<object> Test() { return new HttpResponseMessage<object>(new { Message = "Hello" […]