小编aus*_*ush的帖子

表格封闭但可见

为什么在引发FormClosed事件后表单仍然可见?如何检测表单何时实际关闭?

在此输入图像描述

有趣的是这一点

_form2.VisibleChanged += (s, a) => 
{ 
    if (_form2.Visible == false) 
        MessageBox.Show("TEXT"); 
};
Run Code Online (Sandbox Code Playgroud)

导致相同的结果.

c# modal-dialog winforms

6
推荐指数
1
解决办法
641
查看次数

数组边界检查for循环中的优化

        var ar = new int[500000000];

        var sw = new Stopwatch();
        sw.Start();

        var length = ar.Length;
        for (var i = 0; i < length; i++)
        {
            if (ar[i] == 0);
        }

        sw.Stop();
Run Code Online (Sandbox Code Playgroud)

sw.ElapsedMilliseconds:~2930ms

        var ar = new int[500000000];

        var sw = new Stopwatch();
        sw.Start();

        for (var i = 0; i < ar.Length; i++)
        {
            if (ar[i] == 0);
        }

        sw.Stop();
Run Code Online (Sandbox Code Playgroud)

sw.ElapsedMilliseconds:~3520ms

Win8x64,VS12,.NET4.5,发布版本,"优化代码".

据我所知,第二种方法应该更快,因为数组边界检查优化.我错过了什么吗?

c# arrays for-loop compiler-optimization bounds-check-elimination

4
推荐指数
2
解决办法
857
查看次数

变量如何知道它实现的类型?

据我所知,每个变量都知道它的运行时类型.

这是一个例子:

void Main()
{
    C c = new C();
    c.M();
    I i = (I)c;
    i.M();
}

public interface I
{
    void M();
}

public class C : I
{
    void I.M() 
    {
        Console.WriteLine("I.M");
    }

    public void M() 
    {
        Console.WriteLine("M");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,i仍然知道它的类型是C.那么,i决定使用I.M而不是M?的机制是什么?

c#

4
推荐指数
1
解决办法
209
查看次数

IL约束呼叫

对于此代码:

class Program
{
    static void Main()
    {
        Console.WriteLine(new MyStruct().ToString());
    }

    struct MyStruct { }
}
Run Code Online (Sandbox Code Playgroud)

C#编译器生成constrained callvirtIL代码.

这篇文章说:

例如,如果值类型V覆盖Object.ToString()方法,则会发出调用V.ToString()指令; 如果没有,则发出一个box指令和一个callvirt Object.ToString()指令.如果稍后添加覆盖,则可能出现版本控制问题<...>.

所以,我的问题是:如果编译器生成box代码而不是约束调用,为什么在这种情况下会出现问题?

c# boxing cil

4
推荐指数
1
解决办法
744
查看次数

ListBoxItem绝对位置,Windows Phone 7

如何根据整个ListBox和可见的ScrollViewer区域获取ListBoxItem(它的左上角)的绝对(X,Y)位置?看起来WP7下没有TranslatePoint().

listbox listboxitem windows-phone-7

3
推荐指数
1
解决办法
766
查看次数

并行下载文件的最佳数量

我正在尝试同时下载多个文件。如何确定并行下载的最佳文件数量?

c# parallel-processing webclient downloadfileasync

3
推荐指数
1
解决办法
2333
查看次数

在生产代码中使用PrivateObject而不是Reflection

通过"反射"我的意思是使用System.Reflection命名空间.

MSDN谈到PrivateObject类:"允许测试代码......".我比System.Reflection更喜欢PrivateObject语法,所以我想知道是否有一个真正的理由不在生产代码中使用它,并仅保留它用于单元测试?

c# reflection

1
推荐指数
1
解决办法
392
查看次数