除了Microsoft文档之外,Microsoft Reactive(Rx)框架是否有一个很好的介绍和教程?
此外,Reactive使用常规异步编码技术解决难以解决的编程问题更容易成为一个很好的例子(使用代码)?
使用C#编译器查询理解功能,您可以编写如下代码:
var names = new string[] { "Dog", "Cat", "Giraffe", "Monkey", "Tortoise" };
var result =
from animalName in names
let nameLength = animalName.Length
where nameLength > 3
orderby nameLength
select animalName;
Run Code Online (Sandbox Code Playgroud)
在上面的查询表达式中,let
关键字允许将值传递给where和orderby操作,而无需重复调用animalName.Length
.
什么是LINQ扩展方法调用的等效集合,它实现了"let"关键字在这里的作用?
关于数据库对象是否应该受版本控制的SO社区wiki已经有一些讨论.但是,我没有看到很多关于为数据库对象创建构建自动化过程的最佳实践的讨论.
这对我的团队来说是一个有争议的讨论点 - 特别是在评估数据库部署自动化方法的优势和风险时,开发人员和DBA通常有不同的目标,方法和关注点.
我想听听SO社区关于哪些实践在现实世界中有效的一些想法.
我意识到这有点主观,哪些实践真的是最好的,但我认为一个关于哪些工作可能对许多人有帮助的良好对话.
以下是我在此主题中关注领域的一些预告片问题.这些并不是一个明确的清单 - 而是人们帮助理解我正在寻找的东西的起点.
在我们编程时,我们都会开发我们使用和依赖的实践和模式.然而,随着时间的推移,随着我们的理解,成熟,甚至技术使用的变化,我们逐渐意识到我们曾经认为很棒的一些实践并不(或不再适用).
我曾经经常使用但最近几年改变的一种做法的例子是使用Singleton对象模式.
通过我自己的经验和与同事的长时间辩论,我逐渐意识到单身人士并不总是令人满意 - 他们可以使测试更加困难(通过抑制嘲讽等技术)并且可以在系统的各个部分之间产生不希望的耦合.相反,我现在使用对象工厂(通常使用IoC容器)来隐藏系统中不关心或需要知道的部分单体的性质和存在.相反,他们依靠工厂(或服务定位器)来获取对这些对象的访问权.
我本着自我改善的精神向社会提出的问题是:
.NET中的基类库为集合(List,Queue,Stack,Dictionary)提供了一些出色的数据结构,但奇怪的是它不包含二进制树的任何数据结构.对于某些算法,例如利用不同遍历路径的算法,这是非常有用的结构.我正在寻找一个正确编写的免费实现.
我只是瞎了,没找到它......它被埋在BCL的某个地方吗?如果没有,有人可以为二进制树推荐免费或开源的C#/.NET库吗?优选使用仿制药的一种.
编辑:澄清我在寻找什么.我对内部使用树的有序字典集合不感兴趣.我实际上对二叉树感兴趣 - 一个公开其结构的树,以便您可以执行诸如提取子树或在节点上执行修复后遍历等操作.理想情况下,这样的类可以扩展为提供专门树的行为(即红/黑,AVL,平衡等).
使用Reflection.Emit库与CodeDOM在运行时动态生成代码有什么优缺点?
我试图在基于XML格式运行时可用元数据的系统中生成一些(相对复杂的)动态类.我将生成扩展应用程序集中现有类的类,实现其他接口,添加方法以及覆盖虚拟和抽象成员.
我想确保在深入实现之前选择适当的技术.有关这些不同代码生成技术如何不同的任何信息都会有所帮助.此外,任何有关简化或简化工作的开源库的信息都将是有用的.
任何版本的SQL Server都支持可延迟约束(DC)吗?
从版本8.0开始,Oracle支持可延迟约束 - 仅在提交语句组时评估的约束,而不是在插入或更新单个表时.可延迟约束不仅仅是禁用/启用约束,因为约束仍处于活动状态 - 它们仅在稍后(批处理提交时)进行评估.
DC的好处是它们允许评估单独非法的更新,这些更新累积地导致有效的最终状态.一个示例是在两行之间的表中创建循环引用,其中每行需要存在一个值.没有单独的插入语句会通过约束 - 但组可以.
为了阐明我的目标,我希望将C#中的ORM实现移植到SQLServer - 遗憾的是,实现依赖于Oracle DC来避免在行之间计算插入/更新/删除命令.
我在哪里可以找到有关企业服务总线(ESB)的用途和好处的一些信息?
我正在寻找有关的信息:
我正在寻找比维基百科或供应商的在线营销手册更精细的细节.理想情况下,一些示例代码将有助于阐明利用ESB所涉及的内容.从.NET或Java角度来看,信息最有用.
谢谢.
.NET BCL中是否有任何现有功能可以使用MethodInfo提供的信息在运行时打印方法的完整签名(就像您在Visual Studio ObjectBrowser中看到的那样 - 包括参数名称)?
因此,例如,如果查找String.Compare(),其中一个重载将打印为:
public static int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignoreCase, System.Globalization.CultureInfo culture)
Run Code Online (Sandbox Code Playgroud)
请注意包含所有访问和范围限定符的完整签名以及包括名称的完整参数列表.这就是我要找的东西.我可以编写自己的方法,但如果可能的话,我宁愿使用现有的实现.
我正在编写重构Silverlight程序,以从WCF服务中消耗其现有业务逻辑的一部分.在这样做时,我遇到了Silverlight 3中的限制,它只允许对WCF服务的异步调用,以避免长时间运行或无响应的服务调用阻塞UI线程(SL有一个有趣的排队模型来调用WCF服务)在UI线程上).
因此,编写曾经很简单的东西变得越来越复杂(请参阅我的问题末尾的代码示例).
理想情况下,我会使用协同程序来简化实现,但遗憾的是,C#目前不支持协同程序作为本机语言工具.但是,C#确实具有使用yield return
语法的生成器(迭代器)的概念.我的想法是重新使用yield关键字,以允许我为相同的逻辑构建一个简单的协同模型.
但是,我不愿意这样做,因为我担心可能存在一些我没有预料到的隐藏(技术)陷阱(考虑到我对Silverlight和WCF的相对缺乏经验).我也担心未来的开发人员可能不清楚实现机制,并且可能会阻碍而不是简化他们将来维护或扩展代码的努力.我已经在SO上看到了关于重构迭代器以构建状态机的问题:使用"yield"关键字实现状态机,虽然它与我正在做的事情不完全相同,但它确实让我停下来.
但是,我需要做一些事情来隐藏服务调用的复杂性,并管理此类更改中的缺陷的工作量和潜在风险.我对可以用来解决这个问题的其他想法或方法持开放态度.
原始的非WCF版本的代码看起来像这样:
void Button_Clicked( object sender, EventArgs e ) {
using( var bizLogic = new BusinessLogicLayer() ) {
try {
var resultFoo = bizLogic.Foo();
// ... do something with resultFoo and the UI
var resultBar = bizLogic.Bar(resultFoo);
// ... do something with resultBar and the UI
var resultBaz = bizLogic.Baz(resultBar);
// ... do something with resultFoo, resultBar, resultBaz
}
}
}
Run Code Online (Sandbox Code Playgroud)
重新考虑的WCF版本变得更加复杂(即使没有异常处理和前/后条件测试):
// fields needed to …
Run Code Online (Sandbox Code Playgroud) c# ×6
.net ×5
asynchronous ×2
database ×2
architecture ×1
codedom ×1
constraints ×1
debugging ×1
esb ×1
java ×1
linq ×1
oracle ×1
reflection ×1
sql ×1
sql-server ×1
wcf ×1
yield ×1