问题列表 - 第12323页

.NET和C#异常.抓住什么是合理的

免责声明,我来自Java背景.我没有做太多的C#.这两个世界之间存在大量的转移,但当然存在差异,其中一个是异常倾向于被考虑的方式.

我最近回答了一个C#问题,建议在某些情况下,这样做是合理的:

 try {
   some work
 } catch (Exeption e) {
       commonExceptionHandler();
 }
Run Code Online (Sandbox Code Playgroud)

(原因不重要).我收到的答复我不太明白:

直到.NET 4.0,捕获异常非常糟糕.这意味着你可以捕获各种低级致命错误,从而掩盖错误.它还意味着如果某种类型的损坏触发了这样的异常,堆栈上的任何打开的finally块都将被执行,所以即使callExceptionReporter函数尝试记录并退出,它甚至可能无法到达那一点( finally块可能再次抛出,或导致更多损坏,或从磁盘或数据库中删除重要的东西).

我可能比我意识到的更困惑,但我不同意其中的一些.请其他人评论.

  1. 我知道有很多低级别的例外我们不想接受.我的commonExceptionHandler()函数可以合理地重新抛出那些.这似乎与对相关问题的答案一致.这说"根据你的上下文,使用catch(...)是可以接受的,只要重新抛出异常即可." 所以我总结使用catch(Exception)并不总是邪恶,默默地吞下某些例外.

  2. 短语"在.NET 4之前它对Catch Exception来说非常糟糕".NET 4中有哪些变化?这是对AggregateException的引用,它可能会给我们一些与我们捕获的异常有关的新事物,但我不认为更改是基本的"不要吞下"规则.

  3. 下一句话真的很麻烦.这可能是对的吗?

它还意味着如果某种类型的损坏触发了这样的异常,堆栈上的任何打开的finally块都将被执行(finally块可能再次抛出,或导致更多损坏,或从磁盘或数据库中删除重要的东西)

我的理解是,如果有一些低级代码

lowLevelMethod() {
    try {
        lowestLevelMethod();
    } finally {
         some really important stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的代码中我调用lowLevel();

 try {
      lowLevel()
 } catch (Exception e) {
       exception handling and maybe rethrowing
 }
Run Code Online (Sandbox Code Playgroud)

无论我是否捕获异常,这对于finally块的执行都没有任何影响.当我们离开lowLevelMethod()时,finally已经运行了.如果最终要做任何坏事,比如我的磁盘损坏,那么它会这样做.我捕捉异常没有任何区别.如果它到达我的异常块我需要做正确的事情,但我不能成为dmis执行最终的原因

c# exception-handling

12
推荐指数
3
解决办法
1094
查看次数

银行家算法计算时间复杂度

Banker的算法用于确定是否可以满足所有资源请求而不会导致死锁.

m是资源类型的总数

n是进程总数

NEED是一个大小为m*n的数组,它定义了每种资源类型的待处理请求.例如:NEEDij = 2表示进程i请求2项资源j.

算法如下:

BOOLEAN function SAFESTATE is -- Determines if current state is safe
{ NOCHANGE : boolean; 
  WORK : array[1..m] of INTEGER = AVAILABLE;
  FINISH : array[1..n] of boolean = [false, ..,false];
  I : integer;

  repeat
    NOCHANGE = TRUE;
    for I = 1 to N do
      if ((not FINISH[i]) and
         NEEDi <= WORK) then {
         WORK = WORK + ALLOCATION_i;
         FINISH[i] = true;
         NOCHANGE = false;
      }
  until NOCHANGE;
  return (FINISH == (true, .., true)); …
Run Code Online (Sandbox Code Playgroud)

algorithm complexity-theory

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

正确捕获LoadLibrary()错误

我正在研究一种在Windows XP和Windows Vista之间的所有Windows版本上运行的C++软件.在我的代码中,我开发了一个链接标准库(Qt库)的DLL .一旦部署了我的软件,用户在他的系统上没有完全相同的Qt构建,但配置略有不同并不罕见.可能存在禁用的功能(因此它们的Qt构建不会导出相同的符号集),或者甚至可能以使库二进制文件与原始文件不兼容的方式更改库.

在某些时候,我通过LoadLibrary()调用加载我的DLL.这可以吸引用户系统上的任何Qt库.如果我很幸运,他们的Qt构建与我在开发DLL时使用的内容兼容,因此LoadLibrary()成功.但是,根据他们对Qt构建所做的更改,LoadLibrary()调用有时会失败

  • "指定的模块无法找到."; 如果他们的Qt构建包含比我的Qt构建更少的DLL,通常会发生这种情况.所以我的DLL试图加载例如QtFoo.dll但由于这个dll不是他们的Qt构建的一部分,加载我的DLL失败.
  • "无法找到指定的程序."; 如果他们更改了他们的Qt构建以便禁用某些功能,这通常会发生这种情况,这会导致导出的符号减少.

我的问题是:我怎样才能优雅地捕捉到这些错误?对,我只是使用GetLastError(),然后打印上述两个消息之一.然而,这将是多少,如果我知道更多有用的模块无法找到,或者缺少的程序.我注意到,当在资源管理器中运行一个链接缺少DLL的应用程序时,资源管理器设法产生一个很好的'由于缺少所需的库blah.dll而无法加载应用程序foo'.是否有一些API可用于获取有关LoadLibrary()调用失败原因的更多信息?

c++ windows plugins qt loadlibrary

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

jpa中生成的表中的排序错误

这应该是一件相当简单的事情,但我正在努力.

我希望像这样生成一个表:

id 
organizationNumber 
name

但是,当我查看数据库时,我发现排序错误.有谁知道我如何强制hibernate/jpa生成正确排序的表?

desc Organization;
+--------------------+--------------+------+-----+---------+----------------+
| Field              | Type         | Null | Key | Default | Extra          |
+--------------------+--------------+------+-----+---------+----------------+
| id                 | bigint(20)   | NO   | PRI | NULL    | auto_increment | 
| name               | varchar(255) | NO   |     | NULL    |                | 
| organizationNumber | varchar(255) | NO   | UNI | NULL    |                | 
+--------------------+--------------+------+-----+---------+----------------+

这就是我的实体bean的样子:

@Entity
@NamedQuery(name = "allOrganizations", query = "SELECT org FROM Organization org order by name")
public class Organization {

    private …

java hibernate jpa

54
推荐指数
5
解决办法
2万
查看次数

是否可以使用bazaar,mercurial或git进行部分克隆/分支?

假设我在源代码管理中有一个带有很多子目录的项目,其中很多是我目前不需要的.

我想创建一个只包含整个树的一些工作副本,它仍然保持更改,提交和推送它们的能力.

这是可能的,如果是这样,我该怎么办?

我还在决定是否选择集市或mercurial,所以关于其中任何一个的答案都会有所帮助.

编辑:实际上,git的解决方案也很有用.

git version-control mercurial bazaar

19
推荐指数
3
解决办法
8449
查看次数

在ruby项目中处理报告的最佳策略是什么?

最近,客户需要在大型数据集上进行多次转换的复杂报表.

我聘请了Ruport--这是快速和肮脏报道的绝佳选择.然而,经过几次试验后,我意识到ruport嵌套分组和规范化数据并没有结合在一起.现在仍然包括的选择:

  1. 非规范化数据(可能在每晚更新的视图中)+在Ruby中执行一些格式化

  2. 使用完全不同的工具包(JasperReports?)

我害怕这两种可能性.有没有人有更好的想法(理想情况下仅限于ruby的工作范围)?

ruby reporting report

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

main(...)提供了使用静态初始化程序作为伪入口点的哪些好处?

java中程序的入口点通常是这样的


    // MyMain.java
    public class MyMain{  
      //whatever 
        public static void main(String args[]){ 
        System.out.println("balderdash");
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,由于main中只有一个SOP,因此上述类可能是这样的


    // MyMain.java
    public class MyMain{
        //whatever
        static {    
        System.out.println("balderdash");
        }
    }

使用main(...)的一个明显优点是参数可以传递给程序.另一个(我在这里猜测)可能与垃圾收集器有关,不同地处理在静态块中创建的对象.

使用语言定义的入口点还有其他好处 - public static void main(String args [])而不是使用静态初始化程序.

ps上述代码段仅供参考,可能无法编译

java entry-point static-initializer

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

实际上,通常使用什么pthreads功能?

我正在研究我的操作系统项目的POSIX子系统,我已经达到了我想要在pthreads支持上工作的地步.但是,我不确定我应该在多大程度上实施它们.

什么是最常用的pthreads功能?有什么东西我现在可以安全地"存根"并在我们移植需要它的应用程序时实现它吗?到目前为止,我的研究指出了基本的线程操作(创建,连接等等) - 这是非常明显的 - 以及互斥支持.实际上,应用程序使用的远不止这些吗?

我想我只是想弄清楚,在仍然有一个有效的实现的情况下我可以逃脱多少.

posix pthreads

5
推荐指数
2
解决办法
238
查看次数

如何用jQuery隐藏所有正确的兄弟姐妹?

$(this).parent().next().css('display','none');
Run Code Online (Sandbox Code Playgroud)

以上只隐藏了当前兄弟姐妹旁边的兄弟姐妹.

如果有多个,则会失败.

jquery siblings

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

如何在VBA中测试Excel工作簿中是否存在VBA?

我正在编写一个报告工具来记录各种"合规性标准"的Excel文件,包括wkb.VBProject.Protection报告VBA是否被锁定.

但是,如何找到工作簿是否有任何项目?

如果我计算

wkb.VBProject.VBComponents.Count - wkb.Worksheets.Count - 1 '(for the workbook)
Run Code Online (Sandbox Code Playgroud)

这将给我模块+类模块+表单的数量,但我仍然可以在工作表后面有一些代码.

在Excel中有没有办法 - 比如Access frm.HasModule - 找出工作簿中是否有任何VBA代码?

excel vba excel-vba

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