如果调用代码只迭代集合,是否有任何理由将内部集合公开为ReadOnlyCollection而不是IEnumerable?
class Bar
{
private ICollection<Foo> foos;
// Which one is to be preferred?
public IEnumerable<Foo> Foos { ... }
public ReadOnlyCollection<Foo> Foos { ... }
}
// Calling code:
foreach (var f in bar.Foos)
DoSomething(f);
Run Code Online (Sandbox Code Playgroud)
正如我所看到的,IEnumerable是ReadOnlyCollection接口的一个子集,它不允许用户修改集合.因此,如果IEnumberable接口足够,那么就是要使用的接口.这是推理它的正确方法还是我错过了什么?
谢谢/ Erik
为了保持我的集成测试独立,我删除所有旧数据并在每次测试之前插入新的测试数据.有没有比仅仅查询所有实体并逐个删除它们更好的方法呢?
我考虑过编写一个运行"从tablename删除"的存储过程; 对于要清除的每个表.这应该快得多,但如果不进行SQL查询或通过NH调用SP,这样做会很好.
我正在使用vanilla NHibernate和Linq来NHibernate.我相信Castle Active Record有类似Foo.DeleteAll()的东西,但我不想在这个项目中使用Active Record.
有任何想法吗?
谢谢/ Erik
更新:
自从提出并回答了这个问题以来,NHibernate团队取得了进展.正如Ayende在本博文中解释的那样,您现在可以直接执行DML查询,而无需NHibernate获取任何实体.
要删除所有Foo对象,您可以这样做:
using (ISession session = ...)
using (ITransaction transaction = session.BeginTransaction())
{
session.CreateQuery("delete Foo f").ExecuteUpdate();
transaction.Commit();
}
Run Code Online (Sandbox Code Playgroud)
此查询将生成以下SQL:
delete from Foo
Run Code Online (Sandbox Code Playgroud)
这要比首先获取实体然后删除实体要快得多.但要小心,因为像这样的查询不会影响1级缓存.
如果您正在编写一个使用系统/库调用的多线程应用程序,它使用errno来指示错误类型,那么使用errno是否有安全的方法?如果没有,是否有其他方法来指示发生的错误类型而不仅仅是发生了错误?
是否有一种简单的方法可以获得HTML textarea和一个输入类型="text"来渲染(大约)相等的宽度(以像素为单位),这在不同的浏览器中有效吗?
CSS/HTML解决方案非常棒.我宁愿不必使用Javascript.
谢谢/ Erik
我目前正在C#中编写一个简单的,基于计时器的迷你应用程序,每隔k秒执行n次动作.
我正在尝试采用测试驱动的开发风格,因此我的目标是对应用程序的所有部分进行单元测试.
所以,我的问题是:有没有一种好的方法来对基于计时器的类进行单元测试?
正如我所看到的那样,问题在于,测试执行时需要花费很大的时间,因为他们必须等待这么长时间才能完成所需的操作.
特别是如果想要实际数据(秒),而不是使用框架允许的最小时间分辨率(1毫秒?).
我正在使用模拟对象来执行操作,以记录操作被调用的次数,以便操作几乎没有时间.
作为一种寻找灵感并提高我的PHP技能的方法,我正在寻找一些漂亮的PHP源代码来阅读,最好是一个开源的"标准"网站,而不是像phpMyAdmin这样的工具类项目.
那么,我在哪里可以找到一些漂亮的PHP代码?
是否有以编程方式运行Visual Studio单元测试的API?
使用Process.Start()运行MSTests.exe在当前方案中不起作用.我正在寻找的是像NUnit SimpleTestRunner.
有任何想法吗?
/埃里克
据我所知,IDeserializationCallback接口和OnDeserialized事件都可以在对象需要在反序列化后执行某些任务时使用.
IDeserializationCallback:
[Serializable]
public class Foo : IDeserializationCallback
{
public void OnDeserialization(object sender)
{
// initialize unserialized fields etc.
}
}
Run Code Online (Sandbox Code Playgroud)
OnDeserialized事件:
[Serializable]
public class Foo
{
[OnDeserialized]
public void OnDeserialized(StreamingContext context)
{
// initialize unserialized fields etc.
}
}
Run Code Online (Sandbox Code Playgroud)
是否有任何特定的优点/缺点或场景,您可以选择其中一个?
在Common Lisp中,是否可以在特定范围内重新定义已定义的函数?例如,给定一个调用函数B的函数A.我可以在调用A时暂时重新定义B吗?
我正在寻找一个let块的东西,但这可以重新定义函数.
.net ×3
c# ×3
common-lisp ×2
unit-testing ×2
c ×1
clojure ×1
collections ×1
css ×1
emacs ×1
errno ×1
html ×1
ienumerable ×1
mstest ×1
nhibernate ×1
php ×1
slime ×1
textarea ×1
timer ×1