小编noc*_*ura的帖子

编写重试逻辑最干净的方法?

偶尔我需要在放弃之前多次重试一次手术.我的代码是这样的:

int retries = 3;
while(true) {
  try {
    DoSomething();
    break; // success!
  } catch {
    if(--retries == 0) throw;
    else Thread.Sleep(1000);
  }
}
Run Code Online (Sandbox Code Playgroud)

我想在一般的重试函数中重写它,如:

TryThreeTimes(DoSomething);
Run Code Online (Sandbox Code Playgroud)

在C#中有可能吗?该TryThreeTimes()方法的代码是什么?

.net c#

434
推荐指数
13
解决办法
20万
查看次数

垃圾收集器调用Dispose()吗?

我认为如果您的程序没有,GC会最终调用Dispose,但是您应该在程序中调用Dispose()以使清除确定性.

但是,从我的小测试程序来看,我根本没有看到Dispose被调用....

public class Test : IDisposable
{
    static void Main(string[] args)
    {
        Test s = new Test();
        s = null;
        GC.Collect();
        Console.ReadLine();
    }

    public Test()
    {
        Console.WriteLine("Constructor");
    }

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

//输出只是"构造函数",我没有像我期望的那样得到"Dispose".这是怎么回事?

编辑:是的,我知道我应该调用Dispose() - 我在使用一次性物体时遵循标准模式.我的问题出现了,因为我试图追踪某些elses代码的漏洞,这是托管C++(另一层复杂性,这将是另一个线程的好主题).

.net c# memory garbage-collection dispose

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

声明一个方法总是抛出一个异常?

我有一个像......的方法

int f() {
  try {
    int i = process();
    return i;
  } catch(Exception ex) {
    ThrowSpecificFault(ex);
  }
}
Run Code Online (Sandbox Code Playgroud)

这会产生编译器错误,"并非所有代码路径都返回值".但在我的情况下,ThrowSpecificFault()将始终抛出(相应的)异常.所以我被迫在最后放一个返回值,但这很难看.

首先,这种模式的目的是因为"process()"是对外部Web服务的调用,但需要转换各种不同的异常以匹配客户端的预期接口(我认为是〜外观模式).

有什么更干净的方法吗?

.net c# exception-handling exception checked-exceptions

25
推荐指数
4
解决办法
9010
查看次数

强制应用程序在特定的.NET运行时版本下运行?

我安装了.NET 2.0运行时,然后我安装了.NET 4.0运行时,所以我有两个.当我运行.NET应用程序时,有没有办法强制使用哪个运行时?

编辑/澄清: 我的意思是没有关于如何构建应用程序的问题.我假设.NET 4.0运行时可以运行5年前编译的针对2.0运行时(oldprogram.exe)的.NET程序.所以现在我在两台运行时的机器上,其中任何一个都可以处理oldprogram.exe.选择了哪个运行时?我可以影响选择哪个运行时?

.net

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

在Javascript中简单的游戏循环的最佳方式?

有一种简单的方法可以在JavaScript中制作游戏循环吗?就像是...

onTimerTick() {
  // update game state
}
Run Code Online (Sandbox Code Playgroud)

javascript game-loop

21
推荐指数
4
解决办法
3万
查看次数

抑制第三方库控制台输出?

我需要调用一个第三方库来碰巧向控制台吐出一堆东西.代码就像这样......

int MyMethod(int a)
{
   int b = ThirdPartyLibrary.Transform(a);  // spews unwanted console output
   return b;
}
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来抑制ThirdPartyLibrary中不需要的控制台输出?出于性能原因,解决方案中不能使用新进程或线程.

.net c# console-application

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

.NET应用程序的故障注入?

我想知道是否有人知道自动将常见故障注入正在运行的.NET程序的工具或技术.好像......

  • 在分配时随机注入OutOfMemoryException
  • 在尝试访问文件时随机注入FileNotFoundException
  • 使用套接字时随机注入IO或网络异常.

所以我真的在寻找一种方法来拦截CLR中的一些特定调用,类似于AppVerifier对本机Win32代码的调用.目的是在开发人员控制之外的许多错误条件下测试应用程序,并确保处理这些条件.

.net clr fault intercept

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

什么时候用'this'(C#)作为前置成员的好规则?

如果我正在访问成员字段,属性或方法,我将永远不确定何时应该使用'this'作为前缀.

我不是在询问需要它的情况,例如局部变量具有相同名称的情况.我说的是意义完全相同的情况.哪个更具可读性?我应该遵循哪些标准,最佳实践或经验法则?它应该在整个班级或整个代码库中保持一致吗?

c# coding-style

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

Timer.Change()是否会返回false?

.NET System.Threading Timer类有几个重载的Change()方法,如果计时器成功更新,则返回"true";否则返回false.

参考:http://msdn.microsoft.com/en-us/library/yz1c7148.aspx

这种方法实际上是否真的返回false?什么会导致这返回错误?

.net c# multithreading timer

15
推荐指数
3
解决办法
751
查看次数

如何解析X509Certificate2中的主题替代名称?

有没有一种简单的方法从X509Certificate2对象获取主题备用名称?

        foreach (X509Extension ext in certificate.Extensions)
        {
            if (ext.Oid.Value.Equals(/* SAN OID */"2.5.29.17"))
            {
                byte[] raw = ext.RawData;
                // ?????? parse to get type and name ????????
            }
        }
Run Code Online (Sandbox Code Playgroud)

.net certificate x509certificate2

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