我想知道最好的方法是"如果所有其他方法都失败了".
我的意思是,你在应用程序中处理尽可能多的异常,但仍然存在bug,所以我需要有一些东西可以捕获所有未处理的异常,这样我就可以收集信息并将它们存储在数据库中或提交它们到网络服务.
AppDomain.CurrentDomain.UnhandledException事件是否捕获了所有内容?即使应用程序是多线程的?
旁注:Windows Vista公开了本机API函数,允许任何应用程序在崩溃后自行恢复...现在无法想到名称...但我宁愿不使用它,因为我们的许多用户仍在使用Windows XP.
如果我有一个switch-case语句,其中switch中的对象是字符串,是否可以进行ignoreCase比较?
我有例如:
string s = "house";
switch (s)
{
case "houSe": s = "window";
}
Run Code Online (Sandbox Code Playgroud)
将获得价值"窗口".如何覆盖switch-case语句,以便使用ignoreCase比较字符串?
Shell脚本通常用作粘合剂,用于自动化和简单的一次性任务.您最喜欢的Bash shell /脚本语言的"隐藏"功能有哪些?
也可以看看:
我想迭代字母表,如下所示:
foreach(char c in alphabet)
{
//do something with letter
}
Run Code Online (Sandbox Code Playgroud)
一组字符是最好的方法吗?(感觉很讨厌)
编辑:度量标准是"实现最少的类型,同时仍然可读且健壮"
无法在没有附加处理程序的C#中触发事件.因此,在每次调用之前,有必要检查事件是否为空.
if ( MyEvent != null ) {
MyEvent( param1, param2 );
}
Run Code Online (Sandbox Code Playgroud)
我想保持我的代码尽可能干净,并摆脱那些空检查.我不认为这会影响性能,至少在我的情况下不会.
MyEvent( param1, param2 );
Run Code Online (Sandbox Code Playgroud)
现在我通过手动为每个事件添加一个空的内联处理程序来解决这个问题.这很容易出错,因为我需要记住这样做等等.
void Initialize() {
MyEvent += new MyEvent( (p1,p2) => { } );
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用反射和一些CLR魔法自动为给定类的所有事件生成空处理程序?
我正在学习C#中的事件/代表.我可以问一下你对我所选择的命名/编码风格的看法(取自Head First C#书)吗?
我明天正在和朋友一起教这个问题,并且正在尝试用最优雅的方式来解释这些概念.(认为理解一门学科的最好方法就是尝试教它!)
class Program
{
static void Main()
{
// setup the metronome and make sure the EventHandler delegate is ready
Metronome metronome = new Metronome();
// wires up the metronome_Tick method to the EventHandler delegate
Listener listener = new Listener(metronome);
metronome.OnTick();
}
}
Run Code Online (Sandbox Code Playgroud)
public class Metronome
{
// a delegate
// so every time Tick is called, the runtime calls another method
// in this case Listener.metronome_Tick
public event EventHandler Tick;
public void OnTick()
{
while (true) …Run Code Online (Sandbox Code Playgroud) 简而言之:我发现Java反模式是不可或缺的资源.适合初学者和专业人士.我还没有为C#找到这样的东西.所以我将这个问题作为社区维基开放,并邀请所有人分享他们对此的了解.由于我是C#的新手,我对此很感兴趣,但不能从一些反模式开始:/
以下是我发现C#而不是其他语言的答案.
我只是复制/粘贴这些!考虑看看这些评论.
NullReferenceException抛出错误的异常:
if (FooLicenceKeyHolder == null)
throw new NullReferenceException();
Run Code Online (Sandbox Code Playgroud)
类中的公共变量(改为使用属性).
除非该类是一个简单的数据传输对象.
if (myBooleanVariable == true)
{
...
}
Run Code Online (Sandbox Code Playgroud)
或者,甚至更好
if (myBooleanVariable != false)
{
...
}
Run Code Online (Sandbox Code Playgroud)
这样的结构通常使用C和C++开发,其中一个布尔值的想法只是一个约定(0 ==假的,什么都为true); 在C#或其他具有真正布尔值的语言中,这不是必需的(或可取的).
using()没有using在适当的地方使用:
object variable;
variable.close(); //Old code, use IDisposable if available.
variable.Dispose(); //Same as close. Avoid if possible use the using() { } pattern.
variable = null; //1. in release optimised away. 2. C# is …Run Code Online (Sandbox Code Playgroud)