小编Eri*_*ebo的帖子

ReadOnlyCollection或IEnumerable用于公开成员集合?

如果调用代码只迭代集合,是否有任何理由将内部集合公开为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

.net c# collections ienumerable readonly-collection

118
推荐指数
3
解决办法
3万
查看次数

使用NHibernate删除表中所有行的最佳方法?

为了保持我的集成测试独立,我删除所有旧数据并在每次测试之前插入新的测试数据.有没有比仅仅查询所有实体并逐个删除它们更好的方法呢?

我考虑过编写一个运行"从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级缓存.

nhibernate stored-procedures linq-to-nhibernate

36
推荐指数
3
解决办法
2万
查看次数

有没有办法在多线程应用程序中安全地使用errno?

如果您正在编写一个使用系统/库调用的多线程应用程序,它使用errno来指示错误类型,那么使用errno是否有安全的方法?如果没有,是否有其他方法来指示发生的错误类型而不仅仅是发生了错误?

c errno

35
推荐指数
2
解决办法
7486
查看次数

如何在SLIME REPL中停止正在运行的操作?

有没有办法在SLIME REPL中停止正在运行的操作?

Clojure SLIME的人显然有一些方法可以做到这一点,那么在普通的Common Lisp中呢?

谢谢/ Erik

emacs clojure common-lisp slime read-eval-print-loop

21
推荐指数
1
解决办法
3873
查看次数

有没有一种简单的方法可以使html textarea和输入类型文本同样宽?

是否有一种简单的方法可以获得HTML textarea和一个输入类型="text"来渲染(大约)相等的宽度(以像素为单位),这在不同的浏览器中有效吗?

CSS/HTML解决方案非常棒.我宁愿不必使用Javascript.

谢谢/ Erik

html css textarea

20
推荐指数
2
解决办法
5万
查看次数

单元测试基于计时器的应用?

我目前正在C#中编写一个简单的,基于计时器的迷你应用程序,每隔k秒执行n次动作.
我正在尝试采用测试驱动的开发风格,因此我的目标是对应用程序的所有部分进行单元测试.

所以,我的问题是:有没有一种好的方法来对基于计时器的类进行单元测试?

正如我所看到的那样,问题在于,测试执行时需要花费很大的时间,因为他们必须等待这么长时间才能完成所需的操作.
特别是如果想要实际数据(秒),而不是使用框架允许的最小时间分辨率(1毫秒?).
我正在使用模拟对象来执行操作,以记录操作被调用的次数,以便操作几乎没有时间.

.net c# unit-testing timer

19
推荐指数
2
解决办法
6732
查看次数

哪里可以找到漂亮的PHP代码来阅读?

作为一种寻找灵感并提高我的PHP技能的方法,我正在寻找一些漂亮的PHP源代码来阅读,最好是一个开源的"标准"网站,而不是像phpMyAdmin这样的工具类项目.

那么,我在哪里可以找到一些漂亮的PHP代码?

php

16
推荐指数
5
解决办法
6345
查看次数

是否有以编程方式运行Visual Studio单元测试的API?

是否有以编程方式运行Visual Studio单元测试的API?

使用Process.Start()运行MSTests.exe在当前方案中不起作用.我正在寻找的是像NUnit SimpleTestRunner.

有任何想法吗?

/埃里克

unit-testing mstest visual-studio

15
推荐指数
1
解决办法
4870
查看次数

IDeserializationCallback与OnDeserializedAttribute

据我所知,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)

是否有任何特定的优点/缺点或场景,您可以选择其中一个?

.net c# serialization ideserializationcallback

12
推荐指数
3
解决办法
3499
查看次数

常见的lisp:重新定义范围内的现有函数?

在Common Lisp中,是否可以在特定范围内重新定义已定义的函数?例如,给定一个调用函数B的函数A.我可以在调用A时暂时重新定义B吗?

我正在寻找一个let块的东西,但这可以重新定义函数.

common-lisp

11
推荐指数
3
解决办法
1934
查看次数