Tag: C#的

你为什么要组装程序?

我有一个问题,所有的硬核低级黑客在那里。 我在博客中碰到了这个句子。 我真的不认为这个来源很重要(如果你真的关心,那就是哈克),因为这似乎是一个普遍的说法。 例如,许多现代3D游戏都有用C ++和Assembly编写的高性能核心引擎。 就assembly而言 – 是用汇编编写的代码,因为你不希望编译器发出额外的指令或使用过多的字节,或者你使用了更好的algorithm,而这些algorithm在C中不能expression(或者不能用编译器把他们扼杀起来)? 我完全明白,理解低层次的东西是很重要的。 我只是想了解为什么在程序集合了解之后。

检查目录中是否存在文件夹,并使用C#创build它们

如何检查目录C:/包含名为MP_Upload的文件夹,如果不存在,请自动创build文件夹? 我正在使用Visual Studio 2005 C#。

减less知识库以聚合根

我目前有一个数据库中的每个表的存储库,并希望进一步调整自己与DDD通过减less它们只聚合根。 假设我有以下表格, User和Phone 。 每个用户可能有一个或多个电话。 没有聚合根的概念,我可能会这样做: //assuming I have the userId in session for example and I want to update a phone number List<Phone> phones = PhoneRepository.GetPhoneNumberByUserId(userId); phones[0].Number = “911”; PhoneRepository.Update(phones[0]); 聚合根的概念在纸上比在实践中更容易理解。 我永远不会有不属于用户的电话号码,那么废除PhoneRepository并将与Phone相关的方法合并到UserRepository中是否合理呢? 假设答案是肯定的,我将重写之前的代码示例。 我允许在UserRepository上有返回电话号码的方法吗? 或者它应该总是返回一个用户的引用,然后通过用户遍历关系来获得电话号码: List<Phone> phones = UserRepository.GetPhoneNumbers(userId); // Or User user = UserRepository.GetUserWithPhoneNumbers(userId); //this method will join to Phone 不pipe我以哪种方式获得手机,假设我修改了其中一个,我该如何去更新它们? 我有限的理解是根源下的对象应该通过根来更新,这将引导我select下面的select#1。 尽pipeEntity […]

如何Moq一个方法,在其签名中有一个可选的参数,没有明确指定或使用重载?

鉴于以下界面: public interface IFoo { bool Foo(string a, bool b = false); } 试图用Moq来嘲笑它: var mock = new Mock<IFoo>(); mock.Setup(mock => mock.Foo(It.IsAny<string>())).Returns(false); 在编译时给出以下错误: expression式树可能不包含使用可选参数的调用或调用 我发现上面提到的问题是Moq问题清单中的一个增强 ,它似乎被分配到4.5版本(无论何时)。 我的问题是:我应该怎么做才能使上述问题不会很快得到解决呢? 我的select只是要么显式设置可选参数的默认值每次我嘲笑它(哪种破坏首先指定一个点)或创build一个没有bool的重载(就像我会做的在C#4之前)? 还是有人遇到更聪明的方法来解决这个问题?

跆拳道是跆拳道? (在WebKit代码库中)

我下载了Chromium的代码库并运行了WTF命名空间 。 namespace WTF { /* * C++'s idea of a reinterpret_cast lacks sufficient cojones. */ template<typename TO, typename FROM> TO bitwise_cast(FROM in) { COMPILE_ASSERT(sizeof(TO) == sizeof(FROM), WTF_wtf_reinterpret_cast_sizeof_types_is_equal); union { FROM from; TO to; } u; u.from = in; return u.to; } } // namespace WTF 这是否意味着我认为的意思? 可能是这样,如果TO或FROM不是POD ,并且不是(AFAIK)比reinterpret_cast内置的C ++更强大的话,那么这里指定的bitwise_cast实现将不会被编译。 我在这里看到的唯一亮点就是没有人在Chromium项目中使用bitwise_cast 。

我如何selectSemaphore和SemaphoreSlim?

他们的公共接口看起来类似 该文档指出,SemaphoreSlim是一个轻量级的替代品,不使用Windows内核信号量。 这个资源指出SemaphoreSlim要快得多。 在什么情况下,SemaphoreSlim对Semaphore更有意义,反之亦然?

在模板中使用内联关键字是否有意义?

由于模板是在头文件中定义的,编译器能够确定内联函数是否有利,它是否有意义? 我听说现代编译器知道何时内联函数并忽略inline提示。 编辑:我想接受这两个答案,但这是不可能的。 为了解决这个问题,我接受了phresnel的答案,因为它得到了大部分的选票,他是正式的,但正如我在评论中提到的,我认为Puppy和Component 10的答案也是正确的,从不同的angular度。 问题在于C ++语义,在内inline关键字和内联的情况下不严格。 phresnel说:“如果你的意思是内联写的”,但是实际上inline意思并不清楚,因为它从原来的意义演变为一个指令,就像Puppy所说的那样,“停止了编译器对ODR违规的唠叨”。

在C#中使用委托

在C#语言和.NET框架中,你能帮助我理解代表吗? 我试图检查一些代码,发现我收到的结果是我意想不到的。 这里是: class Program { public static int I = 0; static Func<string> del = new Func<string>(I.ToString); static void Main(string[] args) { I = 10; Console.WriteLine("{0}", del()); } } 答案是0,但不是10.为什么?

std :: shared_ptr线程安全解释

我正在阅读http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html和一些线程安全问题仍然不清楚: 标准保证引用计数处理线程安全,它是平台独立的,对吗? 类似的问题 – 标准保证只有一个线程(持有最后的引用)将调用共享对象上的删除,对不对? shared_ptr不保证存储在其中的对象的任何线程安全? 编辑: 伪代码: // Thread I shared_ptr<A> a (new A (1)); // Thread II shared_ptr<A> b (a); // Thread III shared_ptr<A> c (a); // Thread IV shared_ptr<A> d (a); d.reset (new A (10)); 在线程IV中调用reset()将删除在第一个线程中创build的A类的前一个实例,并将其replace为新的实例? 而且在IV线程中调用reset()之后,其他线程只会看到新创build的对象?

为什么没有默认的移动赋值/移动构造函数?

我是一个简单的程序员。 我的类成员variables通常由PODtypes和STL容器组成。 正因为如此,我很less必须编写赋值操作符或复制构造函数,因为这些都是默认实现的。 std::move ,如果我使用std::move不可移动的对象,它会使用赋值运算符,这意味着std::move是完全安全的。 因为我是一个简单的程序员,所以我想利用移动function,而不必为我编写的每个类添加移动构造器/赋值运算符,因为编译器可以简单地将它们实现为“ this->member1_ = std::move(other.member1_);… “ 但它不(至less在Visual 2010中),是否有任何特别的原因呢? 更重要的是; 有什么办法可以解决这个问题吗? 更新:如果你看低于GManNickG的答案,他提供了一个伟大的macros。 如果你不知道,如果你实现移动语义,你可以删除交换成员函数。