我正在使用C#为Unity3D开发,并认为拥有一个断言函数会很有用.(在Unity3D中,System.Diagnostics.Debug.Assert 存在,但什么都不做.)
作为主要在C++中工作的开发人员,我习惯通过预处理器字符串化运算符来断言包含断言表达式的消息.也就是说,如果表单的断言失败ASSERT(x > 0, "x should not be zero."),则在运行时消息显示的消息可以包括文本"x> 0".我希望能够在C#中做同样的事情.
我知道ConditionalAttribute和DebuggerHiddenAttribute,并且正在使用它们(虽然后者似乎被与Unity捆绑的MonoDevelop的自定义构建忽略).在搜索此问题的解决方案时,我在System.Runtime.CompilerServices命名空间中遇到了三个与我正在尝试做的相关的属性:CallerFilePathAttribute,CallerLineNumberAttribute和CallerMemberNameAttribute.(在我的实现,我用System.Diagnostics.StackTrace用fNeedFileInfo == true吧.)
我想知道是否有任何反射魔法(似乎不太可能)或属性魔法(似乎更有可能),这可以帮助我实现我在C++中习惯的相同功能.
根据这篇文章,我试图让自己养成在更新我的工作副本时显式获取和合并的习惯。但是,今天我在发出命令时犯了一个错字:
$ git fetch origin
$ git merge origin asdf
Run Code Online (Sandbox Code Playgroud)
请注意,我在合并命令中使用了空格而不是正斜杠。因为它似乎已经达到了预期的效果,所以直到我已经推送它才注意到它在日志中添加了一个措辞奇怪的提交:
commit 65f0037bed926c338cb95e7437e7f7f407028d9f
Author: Me <my_email@example.com>
Date: Mon May 14 09:36:44 2012 -0700
Merge branch 'asdf', remote-tracking branch 'origin' into asdf
Run Code Online (Sandbox Code Playgroud)
现在我想知道这是否真的有任何负面影响。似乎它将参数视为两个单独的分支规范以合并到当前分支中,并且“origin”将隐式扩展为“origin/asdf”——这正是我真正想要的。那时,我不知道为什么它甚至会允许“将分支‘asdf’合并到 asdf”发生。
这只是一个令人尴尬的无操作吗?或者我是否在我的存储库历史记录中引入了一个潜在的有问题的构造?
编辑:输出 git cat-file commit 65f0037b
tree 74ed9ead4b82e4e56bd5656ee10375f8f0fcb60d
parent 3bc2a37031a4a391aa4da64c22e3f55148cd23e2
author Me <my_email@example.com> 1337013404 -0700
committer Me <my_email@example.com> 1337013404 -0700
Merge branch 'asdf', remote-tracking branch 'origin' into asdf
Run Code Online (Sandbox Code Playgroud)