小编use*_*472的帖子

C#函数是否有标准的"永不返回"属性?

我有一个看起来像这样的方法:

void throwException(string msg)
{
    throw new MyException(msg);
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我写

int foo(int x, y)
{
    if (y == 0)
        throwException("Doh!");
    else
        return x/y;
}
Run Code Online (Sandbox Code Playgroud)

编译器会抱怨foo"并非所有路径都返回一个值".

是否有一个属性我可以添加到throwException以避免这种情况?就像是:

[NeverReturns]
void throwException(string msg)
{
    throw new MyException(msg);
}
Run Code Online (Sandbox Code Playgroud)

我担心自定义属性不会这样做,因为为了我的目的,我需要编译器的合作.

c# attributes exception return-type

30
推荐指数
5
解决办法
3528
查看次数

为什么我们不需要关闭ShellExecute返回的句柄?

成功时,ShellExecute返回一个句柄.

我们需要关闭这个句柄,如果是这样,怎么样?

根据已公布的我微软的例子,我们需要关闭该句柄.但ShellExecute本身的文档在这个主题上是静音的.你能否证实我们确实不需要关闭这个手柄?

但是,一个句柄如何有效并且不需要被关闭?以下哪个陈述是真实的:

  1. 句柄无效,我们无法做任何事情;
  2. 句柄永远不会被释放,并且(微软赞助的)内存泄漏(直到调用者程序结束);
  3. 系统会在某个时间自动释放句柄,之后再也不会重复使用( - >其他类型的资源泄漏).只有在尝试使用它时,我们才能知道它是否仍然指向某种东西.
  4. 还有什么 ?

winapi shellexecute

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

Java是否为每个循环接受了一般的"可迭代"类型?

是否存在XXX<T>可以使用for-each迭代并且包含两者的类型T[],Iterable<T>以便以下编译(假设类上下文和兼容方法do_something)?

public void iterate(XXX<T> items)
{
    for (T t : items)
        do_something(t);
}

public void iterate_array(T[] items)
{
    iterate(items);
}

public void iterate_iterable(Iterable<T> items)
{
    iterate(items);
}
Run Code Online (Sandbox Code Playgroud)

在Java 1.5中,我没有发现任何类型.也许在该语言的更高版本中?(我想这可能是一个常见问题解答.如果它是噪音,请注意.快速谷歌搜索没有给出答案.)

java

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

在 Thread.Sleep 期间可以引发 ThreadAbortException 吗?

Thread.Abort 是否可以中断正在休眠的线程(例如,使用 Thread.Sleep(TimeSpan.FromDays(40)) ?或者它会等到睡眠时间跨度到期?

(备注:FromDays(40) 当然是个笑话。我知道 Thread.Abort 不是停止线程的推荐方法,我正在处理我现在不想重构的遗留代码。)

c# multithreading sleep abort

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