Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在循环内部或外部使用“不安全”会有什么区别吗?_C#_Unsafe - Fatal编程技术网

C# 在循环内部或外部使用“不安全”会有什么区别吗?

C# 在循环内部或外部使用“不安全”会有什么区别吗?,c#,unsafe,C#,Unsafe,过去我从未使用过不安全,但现在我需要它来处理指针操作位图 我找不到任何说明不安全的文档,但我想更好地了解不安全的工作原理,以及在循环内部或外部使用它是否有任何区别 这样做是否更好: unsafe { for (int x = 0; x < maxX; x++) { for (int y = 0; y < maxY; y++) { //Unsafe pointer operations her

过去我从未使用过不安全,但现在我需要它来处理指针操作位图

我找不到任何说明不安全的文档,但我想更好地了解不安全的工作原理,以及在循环内部或外部使用它是否有任何区别

这样做是否更好:

unsafe
{
    for (int x = 0; x < maxX; x++)
    {
        for (int y = 0; y < maxY; y++)
        {           
            //Unsafe pointer operations here.
        }
    }
}
不安全
{
对于(int x=0;x
还是做什么

for (int x = 0; x < maxX; x++)
{
    for (int y = 0; y < maxY; y++)
    {   
        unsafe
        {       
            //Unsafe pointer operations here.
        }
    }
}
for(int x=0;x
不安全
更改编译器将接受哪些表达式并为其生成输出。它本身不产生运行时开销。对于不需要
不安全
的任何表达式,无论是否在
不安全
上下文中,编译器都将发出相同的代码


关于哪些表达式只能在
unsafe
上下文中使用的细节,我建议您参考
unsafe
关键字的第18节,它是一个标记,您可以用来告诉编译器您知道自己在做什么。它的主要用途类似于记录代码:
不安全
块显示指定为非托管区域的代码部分;对代码的实际执行没有影响

考虑到这一点,尽可能减少这一不安全区域的规模是有意义的,这意味着第二种方法比第一种方法更好


值得一提的是,另外两种方法,即标记方法和用
不安全
标记类,也不如将不安全块放在代码的最小可能部分周围的方法。

我认为最好做第二种方法,考虑到for循环本身不需要是
不安全的
,您需要最小化
不安全的
区域。除非,在循环中调用它会有某种开销。@AustinWBryan-从我所读到的来看,似乎你是对的,这就是我们正在做的,但我想更好地理解两者之间的区别。@Dzyann似乎不是一个容易回答的问题。。您可能需要耐心等待……)我很想知道这个解释,我很怀疑在生成的代码方面有什么不同。主要区别在于减少代码的
不安全
占用空间。为什么在不安全区块中包含超出您需要的内容?它只会创建额外的代码行,在这些代码行中,您可能会犯超出标准的错误。我认为第一个代码块会让人们感到困惑,让他们想知道为什么循环是不安全的。对于不可避免的评论来说,这不能回答问题:这会尽可能接近回答问题,鉴于这个问题与StackOverflow无关@Dzyann如果你想要一个设计建议,而不仅仅是一个技术建议,试试CodeReview.SE。@Luaan-谢谢你指出这一点。我并不认为这是设计建议,因为我已经在实际设计问题上剥离了代码。我的兴趣是指不安全的工作方式,因为我四处搜索,不清楚。@Luaan不,它没有回答问题。这个问题是否介于SO和CR之间?对这是否意味着它不可能如此?我不这么认为,但如果你这样做了,你应该投票结束它作为离题。但是对这个问题的任何回答都必须回答这个问题,而事实并非如此。给出半个答案并不是对认为问题离题的恰当回应;投票决定迁移是的。@KRyan Umm,你看到答案了吗?它基本上说“两者产生完全相同的字节码”。你认为什么样的答案更合适?@KRyan-它的目的是改变编译器将接受和生成的输出。这是我回答的第一句话。