像许多人一样,我使用ReSharper来加速开发过程.当您使用它来覆盖类的相等成员时,它为GetHashCode()生成的代码生成如下所示:
public override int GetHashCode()
{
unchecked
{
int result = (Key != null ? Key.GetHashCode() : 0);
result = (result * 397) ^ (EditableProperty != null ? EditableProperty.GetHashCode() : 0);
result = (result * 397) ^ ObjectId;
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
当然我有一些自己的成员,但我想知道的是为什么397?
参加以下C#课程:
c1 {
event EventHandler someEvent;
}
Run Code Online (Sandbox Code Playgroud)
如果有很多订阅c1
的someEvent
事件,我想清除所有这些,那么实现这一目标的最佳方法是什么?还要考虑对此事件的订阅可以是lambdas/anonymous delegates.
目前我的解决方案是添加一个ResetSubscriptions()
方法,将c1
其设置someEvent
为null.我不知道这是否有任何看不见的后果.
我们正在使用VS 2008 Team System和自动化测试套件,并且在运行测试时,测试主机"随机"锁定.我实际上必须杀死VSTestHost进程并重新运行测试以使某些事情发生,否则所有测试都处于"挂起"状态.
有没有人遇到类似的行为,并知道修复?我们这里有3个开发人员遇到相同的行为.
以下测试用例在rhino mocks中失败:
[TestFixture]
public class EnumeratorTest
{
[Test]
public void Should_be_able_to_use_enumerator_more_than_once()
{
var numbers = MockRepository.GenerateStub<INumbers>();
numbers.Stub(x => x.GetEnumerator()).Return(new List<int>
{ 1, 2, 3 }.GetEnumerator());
var sut = new ObjectThatUsesEnumerator();
var correctResult = sut.DoSomethingOverEnumerator2Times
(numbers);
Assert.IsTrue(correctResult);
}
}
public class ObjectThatUsesEnumerator
{
public bool DoSomethingOverEnumerator2Times(INumbers numbers)
{
int sum1 = numbers.Sum(); // returns 6
int sum2 = numbers.Sum(); // returns 0 =[
return sum1 + sum2 == sum1 * 2;
}
}
public interface INumbers : IEnumerable<int> { }
Run Code Online (Sandbox Code Playgroud)
我认为这个测试用例有一些非常微妙的东西,我认为我不是在考虑Rhino …
我在一个利用NHibernate的项目中使用sqlite进行测试用例.一切都很好,除非我尝试创建一个ReadUncommitted事务:
例如Session.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted)
错误消息是:
"的IsolationLevel"
(而已)
调用堆栈如下所示:
at System.Data.SQLite.SQLiteConnection.BeginDbTransaction(IsolationLevel isolationLevel)
at System.Data.Common.DbConnection.System.Data.IDbConnection.BeginTransaction(IsolationLevel isolationLevel)
at NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel isolationLevel)
Run Code Online (Sandbox Code Playgroud)
如果我切换到不同的隔离级别(如序列化或readcommitted),一切都会正确执行.
想法?
NHibernate 2.1.2
SQLite (.NET version) 1.0.65.0
Fluent NHibernate 1.0
Run Code Online (Sandbox Code Playgroud) c# ×2
.net ×1
delegates ×1
events ×1
hash ×1
mocking ×1
nhibernate ×1
resharper ×1
rhino-mocks ×1
sqlite ×1