Tag: C#的

将Moq模拟对象传递给构造函数

我一直在使用RhinoMocks,但刚开始研究Moq。 我有这个非常基本的问题,而且让我感到惊讶的是,这个问题并没有立即开始。 假设我有以下的类定义: public class Foo { private IBar _bar; public Foo(IBar bar) { _bar = bar; } .. } 现在我有一个testing,我需要模拟发送给Foo的IBar。 在RhinoMocks中,我只是简单地按照下面的方式来做,而且它会工作得很好: var mock = MockRepository.GenerateMock<IBar>(); var foo = new Foo(mock); 然而,在Moq这似乎并没有以同样的方式工作。 我正在做如下: var mock = new Mock<IBar>(); var foo = new Foo(mock); 然而,现在它失败了 – 告诉我“不能从'Moq.Mock'转换为'IBar'。我在做什么错了?Moq的推荐方式是什么?

初始化列表的好处

我所知道的使用初始化列表的好处是,它们在初始化非内置的类成员时提供效率。 例如, Fred::Fred() : x_(whatever) { } 优于, Fred::Fred() { x_ = whatever; } 如果x是自定义类的对象。 除此之外,为了保持一致性,甚至使用内置types也使用此样式。 这样做的最普遍的好处是提高了性能。 如果expression式与成员variablesx_的types相同,则expression式的结果直接在x_内部构造 – 编译器不会创build对象的单独副本。 使用其他样式,expression式会导致创build一个单独的临时对象,并将此临时对象传递给x_对象的赋值运算符。 然后那个临时对象被破坏了。 这是无效的。 题 在使用初始化列表的下面的例子中是否有任何效率增益。 我认为没有收获。 第一个版本调用string的复制构造函数,另一个调用string的赋值运算符(没有任何临时的创build)。 这是正确的? class MyClass { public: MyClass(string n):name(n) { } private: string name; }; class MyClass { public: MyClass(string n) { name=n; } private: string name; };

类variables:公共访问只读,但私有访问读/写

哎呀,暂时不在这个套接字库上工作。 我正在尝试用C ++来教育自己。 有了类,有没有办法让variables只读给公众,但是在私人访问时读取+写入? 比如这样的东西: class myClass { private: int x; // this could be any type, hypothetically public: void f() { x = 10; // this is OK } } int main() { myClass temp; // I want this, but with private: it's not allowed cout << temp.x << endl; // this is what […]

LINQjoin多个从句子

在C#中编写LINQ查询时,我知道可以使用join关键字执行join 。 但是下面是做什么的? from c in Companies from e in c.Employees select e; LINQ的书我说这是一种连接,但不是一个正确的连接(使用join关键字)。 那究竟是什么types的连接呢?

等待任务内的asynchronous/等待

我在我的main()中创build了这个构造 var tasks = new List<Task>(); var t = Task.Factory.StartNew( async () => { Foo.Fim(); await Foo.DoBar(); }); //DoBar not completed t.Wait(); //Foo.Fim() done, Foo.DoBar should be but isn't 但是,当我.Wait t时,它不会等待DoBar()的调用完成。 我如何才能真正等待?

entity framework6:审计/跟踪更改

我有我的核心项目在C#中。 我在一个数据库上工作,其中一些表格有“user_mod”和“date_mod”这两个字段,用于标记谁和什么时候做了一些mod,和“data_new”和“user_new”是一样的。 我的问题:是否有办法集中这一点,并使这个数据自动插入,我创builddbContext的实例? 如果没有,我将使用审计跟踪工具。 我已经看到了其中一些,但是有一个问题:所有这些都需要我的模型中的一些代码。 但是我不想写我的模型,因为如果我必须改变它,我会丢失mods。 是否可以使用EF6的审计跟踪而不写入模型文件? 怎么样? 编辑: 我尝试重写saveChanges。 public partial class PieEntities : DbContext { public override int SaveChanges(System.Data.Objects.SaveOptions options) { var timestamp = DateTime.Now; EntityState es = EntityState.Added; ObjectStateManager o = new ObjectStateManager(); foreach (ObjectStateEntry entry in o.GetObjectStateEntries(EntityState.Added )) { if (entry.Entity.GetType() == typeof(TabImpianti)) { TabImpianti impianto = entry.Entity as TabImpianti; impianto.DATA_INS […]

C ++的默认拷贝构造函数本质上是不安全的? 迭代器从根本上是不安全的?

我曾经认为,遵循最佳实践时,C ++的对象模型是非常强大的。 就在几分钟前,我意识到我以前没有过。 考虑这个代码: class Foo { std::set<size_t> set; std::vector<std::set<size_t>::iterator> vector; // … // (assume every method ensures p always points to a valid element of s) }; 我已经写了这样的代码。 直到今天,我还没有看到它的问题。 但是,再想一想,我意识到这个class很破碎: 它的复制构造函数和复制分配复制 vector 的迭代器 ,这意味着它们仍然指向旧 set ! 毕竟新的不是真的! 换句话说, 即使这个类没有pipe理任何资源(无RAII) , 我也必须手动实现copy-constructor ! 这让我感到惊讶。 我从来没有遇到过这个问题,我不知道有什么优雅的方法来解决它。 再想一想,在我看来, 复制构造默认是不安全的 – 实际上,在我看来,类不应该是默认可复制的,因为它们的实例variables之间的任何耦合都有可能导致默认的复制-constructor无效 。 迭代器从根本上不安全的存储? 或者,类应该默认是不可复制的? 下面我想到的解决scheme都是不可取的,因为它们不让我利用自动生成的拷贝构造函数: 手动实现我写的每个非平凡类的复制构造函数。 这不仅容易出错,而且要写一个复杂的课程也是很痛苦的。 […]

如何在可撤销的asynchronous/等待处置TransactionScope?

我正在尝试使用新的asynchronous/等待function与数据库asynchronous工作。 由于一些请求可能是冗长的,我希望能够取消它们。 我遇到的问题是, TransactionScope显然有一个线程亲和力,似乎取消任务时,它的Dispose()运行在一个错误的线程。 特别是,当调用.TestTx()我得到以下AggregateException在task.Wait ()上包含InvalidOperationException : "A TransactionScope must be disposed on the same thread that it was created." 代码如下: public void TestTx () { var cancellation = new CancellationTokenSource (); var task = TestTxAsync ( cancellation.Token ); cancellation.Cancel (); task.Wait (); } private async Task TestTxAsync ( CancellationToken cancellationToken ) { using ( […]

使HashSet <string>不区分大小写

我有HashSet参数的方法。 我需要做大小写不敏感包含在其中: public void DoSomething(HashSet<string> set, string item) { var x = set.Contains(item); … } 是否有任何方法使现有的HashSet不区分大小写(不要创build新的)? 我正在寻找最佳性能的解决scheme。 编辑 包含可以被多次调用。 所以IEnumerable扩展对我来说是不可接受的,因为性能比本地的HashSet Contains方法要低。 解 既然,回答我的问题是NO,这是不可能的,我创build并使用了下面的方法: public HashSet<string> EnsureCaseInsensitive(HashSet<string> set) { return set.Comparer == StringComparer.OrdinalIgnoreCase ? set : new HashSet<string>(set, StringComparer.OrdinalIgnoreCase); }

逐行c – 在ubuntu下debuggingc ++代码

我在ubuntu编码使用gedit并在terminal中运行程序。 当使用Turboc或netbeans在窗口中工作时,我们可以逐行debugging代码。 我们怎么能在Ubuntuterminal做到这一点? 或者其他选项?