草庐IT

令人不安

全部标签

c# - 为什么这个不安全的代码会抛出 NullReferenceException?

我正在使用不安全的代码解决CodeGolf,上的问题我发现了一些我无法解释的东西。这段代码:unsafe{inti=*(int*)0;}因访问冲突(Segfault)而崩溃,但此代码:unsafe{*(int*)0=0;}抛出NullReferenceException。在我看来,第一个正在执行读取,第二个正在执行写入。一个异常告诉我,CLR中的某个地方正在拦截写入并在操作系统终止进程之前将其停止。为什么这会发生在写上,而不是在读上?如果我使指针值足够大,它会在写入时出现段错误。这是否意味着CLR知道有一block内存是保留的,甚至不会尝试写入?那么,为什么它允许我尝试读取该block

c# - 令人惊讶的子串行为

我今天在使用Substring方法时遇到了这种行为:staticvoidMain(string[]args){stringtest="123";for(inti=0;true;i++){try{Console.WriteLine("\"{0}\".Substring({1})is\"{2}\"",test,i,test.Substring(i));}catch(ArgumentOutOfRangeExceptione){Console.WriteLine("\"{0}\".Substring({1})threwanexception.",test,i);break;}}}输出:"123

c# - 提高速度的不安全 C# 技巧

我不习惯使用指针(例如C++)或不安全的孤岛进行编码:仅使用“安全”C#。现在我想在C#中为.NetMicroFramework实现一个函数,其中紧凑性和性能非常重要。基本上,我会收集4条短裤,从而填充缓冲区(例如字节数组)。假设每个样本都是这样的:structMyStruct{publicshortAn1;publicshortAn2;publicshortAn3;publicshortAn4;}每个样本都是通过计时器事件收集的,因此我无法循环(有几个原因)。我尝试了很多方法来有效地做到这一点,但表现最好的似乎是这个:unsafestructMyStruct2{publicfixed

c# - Resharper 中令人困惑的代码突出显示

在某些R#推荐的编辑之后,R#将代码块的背景着色为浅宝蓝色,并在滚动条旁边放置一个相同颜色的标记。这不是错误,甚至不是建议。它似乎是一个临时标志,如果您关闭并重新打开文件,它会清除。重新创建的步骤:写一行代码,如:stringstr=string.Format("{0}",1);请注意,R#会将str变量标记为浅灰色,因为它从未被使用过。在变量上按Alt+Enter并从R#上下文菜单中选择RemoveDeclaration看到这行代码转灯宝蓝色...将光标悬停在滚动条标记上,您看到的只是代码...有谁知道这种“标记”的含义/用处吗?编辑:我的Resharper版本是4.5,在VS200

c# - 您可以通过不安全的方法更改(不可变)字符串的内容吗?

我知道字符串是不可变的,对字符串的任何更改只会在内存中创建一个新字符串(并将旧字符串标记为空闲)。但是,我想知道我下面的逻辑是否合理,因为您实际上可以以循环方式修改字符串的内容。conststringbaseString="Thequickbrownfoxjumpsoverthelazydog!";//initializeanewstringstringcandidateString=newstring('\0',baseString.Length);//PinthestringGCHandlegcHandle=GCHandle.Alloc(candidateString,GCHand

c# - 关于锁的一些令人困惑的事情

我知道如何在我的应用程序中使用锁,但仍然有几件事我不太了解锁定(顺便说一句-我知道lock语句只是使用Monitor类类型的速记符号)。来自http://msdn.microsoft.com/en-us/library/ms173179.aspx:publicclassTestThreading{privateSystem.ObjectlockThis=newSystem.Object();publicvoidFunction(){lock(lockThis){//Accessthread-sensitiveresources.}}}Theargumentprovidedtothelo

C# - 将不安全的 byte* 转换为 byte[]

我有一个unsafebyte*指向已知长度的native字节数组。如何将其转换为byte[]?指向零终止native字符串的unsafesbyte*可以很容易地转换为C#string,因为有一个conversionconstructor为此目的,但我找不到将byte*转换为byte[]的简单方法。 最佳答案 如果ptr是您的不安全指针,并且数组的长度为len,您可以像这样使用Marshal.Copy:byte[]arr=newbyte[len];Marshal.Copy((IntPtr)ptr,arr,0,len);但我确实想知道您

c# - 不安装 SMTP 服务器发送邮件

我有一个.Net应用程序。我希望此应用程序向我发送电子邮件。如何在不安装SMTP服务器的情况下实现这一点? 最佳答案 使用SmtpClient发送MailMessage不需要您在本地计算机上安装服务器。您的电子邮件服务提供商是拥有服务器的提供商(例如smtp.gmail.com),并且您的SmtpClient与它对话。 关于c#-不安装SMTP服务器发送邮件,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

c# - Entity Framework 查询中令人难以置信的重复

我针对特定View的SQL查询返回3个不同的行。select*fromvwSummarywherevidate>='10-15-2010'andvidate但如果我通过我的EntityFramework运行相同的查询,我得到3行,但所有3行都相同,相当于第三行。firstVisibleDate=newDateTime(2010,10,15);lastVisibleDate=newDateTime(2010,10,15);varp1=(fromvindb.vwSummarywherev.viDate>=firstVisibleDate&&v.viDate谁能帮我解决这个问题。编辑:我像这

javascript - Angular 2,添加 calc() 作为内联样式。使用括号的不安全插值

Angular2rc3我正在尝试动态添加calc()到模板中的元素。我有这样的东西。template:`"`exportmyClass{@Input()myInputObject:any;privatewidth:string;ngOnInit(){this.setWidth()}privatesetWidth(){letpercent=myInputObject.percent;this.width='calc('+percent+'%-20px)';}}如果我使用括号,DOM中的输出将如下所示。如果我去掉括号它会起作用(有点)它看起来像这样。这也行不通。有关如何添加calc()的任