在编写一些特别复杂的异常处理代码时,有人问,你不需要确保你的异常对象不为null吗?我说,当然不是,但后来决定尝试一下.显然,你可以抛出null,但它仍然会在某处变成异常.
为什么允许这样做?
throw null;
Run Code Online (Sandbox Code Playgroud)
在这个片段中,幸运的是'ex'不是空的,但它可能是吗?
try
{
throw null;
}
catch (Exception ex)
{
//can ex ever be null?
//thankfully, it isn't null, but is
//ex is System.NullReferenceException
}
Run Code Online (Sandbox Code Playgroud) 我想在不离开Visual Studio的情况下轻松运行批处理文件.批处理文件并不总是相同,它们会根据我正在使用的解决方案而改变.
我知道您可以在Visual Studio的"工具"部分(在"外部工具"下)创建自定义快捷方式.
我的解决方案有各种脚本/批处理文件,我希望有一种方法可以在解决方案文件夹或其他特定于解决方案的地方创建快捷方式.
我可以创建脚本,但似乎没有办法运行脚本.我不想每次要运行脚本时都要打开Windows资源管理器.
也许是一个加载项,它将使用解决方案资源管理器中的选定文件启动进程?或类似的东西?
TFS 2010.三个分支: 主要,发展和发布.
我想轻松检索尚未完全合并到所有三个分支的变更集列表.
让我说我有一个变更集,100,这是一个错误修复,并直接检入发布.我可以使用"跟踪"功能可视化它仅存在于"发布"中.
但这需要我知道看看那个变化集.我正在寻找一个通用列表,它会向我显示一个分支中存在的任何变更集,但不是所有三个变量集.
我知道我可以将Release与Main进行比较以查看差异.这是我唯一的选择吗?
我尝试将变更集与工作项相关联,因此我可以查询非关闭工作项列表,然后作为"规则",我可以在关闭之前验证变更集是否已完全合并.并执行代码比较验证.
我在用
<ItemGroup>
<EmbeddedResource Include="..\..\resources\hbm\*.hbm.xml" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
将一堆xml文件包含到我的C#项目中.工作良好.
但是,我不希望它们出现在我项目的"根级"中,我宁愿在项目的子文件夹中看到它们.
例如,此文件包含Mapping在Visual Studio 的文件夹中:
<ItemGroup>
<EmbeddedResource Include="Mapping\User.hbm.xml" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
这就是我想要的*.hbm.xml文件.
我无法弄清楚如何做到这一点,仍然保留我的通配符*.hbm.xml部分,并将实际文件保存在不同的目录中.
我查看了MSDN关于MSBUILD和项目的文档,但没有运气.
与此问题类似,我需要确定我的NHibernate应用程序中的实体是否脏.在ISession上有一个"IsDirty"方法,但我想检查一个特定的实体,而不是整个会话.
nhibernate.info上的这篇文章描述了一种通过获取数据库状态并将其与实体的当前状态进行比较来检查实体的方法.
我复制了那种方法,但它对我不起作用.看代码:
public static Boolean IsDirtyEntity(this ISession session, Object entity)
{
String className = NHibernateProxyHelper.GuessClass(entity).FullName;
ISessionImplementor sessionImpl = session.GetSessionImplementation();
IPersistenceContext persistenceContext = sessionImpl.PersistenceContext;
IEntityPersister persister = sessionImpl.Factory.GetEntityPersister(className);
EntityEntry oldEntry = sessionImpl.PersistenceContext.GetEntry(entity);
if ((oldEntry == null) && (entity is INHibernateProxy))
{
INHibernateProxy proxy = entity as INHibernateProxy;
Object obj = sessionImpl.PersistenceContext.Unproxy(proxy);
oldEntry = sessionImpl.PersistenceContext.GetEntry(obj);
}
Object [] oldState = oldEntry.LoadedState;
Object [] currentState = persister.GetPropertyValues(entity, sessionImpl.EntityMode);
Int32 [] dirtyProps = persister.FindDirty(currentState, oldState, entity, sessionImpl);
return …Run Code Online (Sandbox Code Playgroud) 我相信这是一个常见的问题/问题,但未能找到一个干净简洁的答案.
问题
如何映射看似具有继承关系的实体:
Company
Supplier
Manufacturer
Customer
Run Code Online (Sandbox Code Playgroud)
但是,供应商可以是制造商.
要么
Person
Doctor
Patient
Employee
Run Code Online (Sandbox Code Playgroud)
患者可以是医生,也可以是员工.
建议:使用角色
在NHibernate论坛的讨论中,响应通常是多重继承.
http://forum.hibernate.org/viewtopic.php?t=959076
他们建议的解决方案是使用组合或使用"角色".但是,我找不到任何关于如何做到这一点的例子或解释.
"赞成合成而非继承." 还记得班上的小礼物吗?在这种情况下,我必须同意你正在尝试多重继承 - 在C#或Java(尚未)中是不可能的.我个人会鼓励您考虑重新建模,因此您拥有一个Person对象,而一个人拥有一对多的角色集合.
题
有没有办法让一个方法始终在测试程序集通过MSTest运行时运行?
类似于[TestInitialize]和[ClassInitialize]属性的工作方式,但对于整个程序集.我不想为每个测试类的[ClassInitialize]方法添加代码.
推理
我的一些测试与数据库交互.他们删除了对生产数据库非常有害的数据和其他内容.只有一个配置文件告诉我的单元测试项目针对非生产数据库运行.
如果有一个方法可以在启动时运行,我会感觉更好,它会说"好的数据库名称不是'生产'"
思路
Log4Net使用程序集属性来配置自身.
using log4net.Config;
[assembly: XmlConfigurator()]
Run Code Online (Sandbox Code Playgroud)
也许我可以做一些类似的事情?
[assembly: CheckDatabaseNameNot("production")]
Run Code Online (Sandbox Code Playgroud) 我们有一个非常重要的应用程序,但到目前为止还没有源代码.该应用程序是用COBOL编写的,编译版本在我们的生产系统中并且正在运行.
但是,我们需要迁移到新的服务器和新的cobol编译器.我们的印象是我们需要重新编译代码才能使它在新服务器上运行.运行exising编译程序会导致运行时内存错误.
我们有一些该程序的源代码,但它已经过时了.不确定它与编译程序之间的差异.
好的,问题是 - 我们该怎么办?
时间不在我们这边,因为我们必须将我们的旧服务器送回来以获得信誉.想法,建议,疯狂还是其他?(源代码控制很明显,我不应该这样做,所以保存讲座)
我有一个有几个构造函数的类,我想从另一个调用"main" - 但是使用null.
只使用this(null)结果编译时错误,所以我将null转换为其他构造函数的类型.编译好.
MyClass
{
public MyClass(SomeType t)
{ }
public MyClass(IList<FooType> l)
: this((SomeType)null)
{ }
}
Run Code Online (Sandbox Code Playgroud)
这感觉,让我们说icky.这是好的,常见的还是疯狂的并且在类中显示出一个缺陷 - 它应该有一个空的构造函数?
"大多数"课程需要一个SomeType,但很少有人可以没有.我希望罕见的时间能够"坚持",并且明显表示"代码不是典型的".
c# ×3
nhibernate ×2
changeset ×1
cobol ×1
constructor ×1
msbuild ×1
mstest ×1
tfs2010 ×1
wcf ×1