分类 C# 下的文章

浅谈C#字符串构建利器StringBuilder

前言

    在日常的开发中StringBuilder大家肯定都有用过,甚至用的很多。毕竟大家都知道一个不成文的规范,当需要高频的大量的构建字符串的时候StringBuilder的性能是要高于直接对字符串进行拼接的,因为直接使用++=都会产生一个新的String实例,因为String对象是不可变的对象,这也就意味着每次对字符串内容进行操作的时候都会产生一个新的字符串实例,这对大量的进行字符串拼接的场景是非常不友好的。因此StringBuilder孕育而出。这里需要注意的是,这并不意味着可以用StringBuilder来代替所有字符串拼接的的场景,这里我们强调一下是频繁的对同一个字符串对象进行拼接的操作。今天我们就来看一下c#中StringBuilder的巧妙实现方式,体会一下底层类库解决问题的方式。

阅读剩余部分

C#预处理器指令

这篇文章我非常倾向于用视频表现出来,这样可以更直观的感受到各个指令的使用方式,无奈我表述能力实在是欠缺,所以还是直接放代码出来吧;

以下代码特别简单,但是如果大家没用过的话,可能直接看代码也是看不懂用途。所以我这里还是大致表述下:

阅读剩余部分

C#多个异步方法的异常处理

如果调用两个异步方法,每个都会抛出异常,该如何处理呢 ? 在下面的示例中,第一个 ThrowAfter 方法被调用,2s 后抛出异常(含消息 first)。该方法结束后,另一个 ThrowAfter 方法也被调用,1s 后也抛出异常。事实并非如此,因为对第一个 ThrowAfter 方法的调用已经抛出了异常,try 块内的代码没有继续调用第二个 ThrowAfter 方法,而是在 catch 块内对第一个异常进行处理。

阅读剩余部分

C#使用AggregateException信息

为了得到所有失败任务的异常信息,可以将 Task.WhenAll 返回的结果写到一个Task 变量中。这个任务会一直等到所有任务都结束。否则,仍然可能错过抛出的异常。上一小节中,catch 语句只检索到第一个任务的异常。不过,现在可以访问外部任务的Exception 属性了。Exception 属性是AggregateException类型的。这个是常类型定义了InnerExceptions 属性(不只是InnerException),它包含了等待中的所有异常的列表。现在,可以轻松遍历所有异常了。

阅读剩余部分

C#获取.exe文件的运行目录

WPF中获取.exe文件的运行路径:System.Windows.Forms.Application.StartupPath
引用:WindowsBase 、System.Windows.Forms

1、获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。

阅读剩余部分