IO monad在C#等语言中是否有意义

在花了很多时间阅读和思考之后,我想我终于掌握了monad是什么,它们是如何工作的,以及它们对它们有用的东西。 我的主要目标是弄清楚monad是否适用于我在C#中的日常工作。 当我开始学习monad时,我得到的印象是它们是神奇的,并且它们以某种方式使IO和其他非纯函数变得纯粹。 我理解monads对于.Net中LINQ之类的东西的重要性,而Maybe对于处理不返回有效值的函数非常有用。 我也很欣赏需要限制代码中的状态并隔离外部依赖,我希望monad也能帮助它们。 但我终于得出结论,IO和处理状态的monad是Haskell的必需品,因为Haskell没有别的方法可以做到(否则,你不能保证排序,有些调用会被优化掉。)但是对于更多的主流语言,monad并不适合这些需求,因为大多数语言已经很容易处理和状态和IO。 所以,我的问题是,公平地说IO monad真的只对Haskell有用吗? 是否有充分的理由在C#中实现IO monad?

LINQ to Entities无法识别方法’System.Object GetValue(…)’

我的问题是我需要查询generics类中属性的值。 该属性标有属性。 请参阅以下代码: var rowKeyProperty = EFUtil.GetClassPropertyForRowKey(); var tenantKeyProperty = EFUtil.GetClassPropertyForTenantKey(); var queryResult = objContext.CreateObjectSet().Single(l => (((int) tenantKeyProperty.GetValue(l, null)) == tenantKey) && (((int)rowKeyProperty.GetValue(l, null)) == KeyValue)); rowKeyProperty和tenantKeyProperty的类型为System.Reflection.PropertyInfo。 我理解为什么我会收到错误。 当linq查询转换为SQL时,它无法理解property.GetValue。 但是,我对这里的工作感到非常难过。 有没有人有任何想法如何实现这一目标? 谢谢。

将1D数组索引转换为2D数组索引

我有2个arrays。 我想将第一个数组的索引转换为第二个数组。 有没有比我下面更好的方法呢? Array array1[9]; Array array2[3][3]; // Index is the index of the 1D array public Point convert1Dto2D(int index) { Point p = new Point(); switch (index) { case 0: px = 0; py = 0; break; case 1: px = 0; py = 1; break; case 2: px = 0; py = 2; […]

将Lync 2010与外部程序集成

如何将Lync 2010与使用所查找信息进行数据库查找并显示小弹出窗口的程序以及带有一些选项的几个按钮进行集成。 该程序已经与其他类型的电话系统一起运行,我需要一个Lync连接器。 我不想在Lync中放置选项卡或其他UI。

LINQ to Dynamics CRM查询本地过滤记录

我使用CRM 2011 RC(v5)LINQ-to-CRM提供程序编写了一个Linq to CRM查询。 我有一个本地声明的List ,我想加入CRM实体,我希望查询在CRM服务器上执行。 一个例子可能有帮助: MyObject myObject = new MyObject(); List myAccountsList = new List(); myAccountsList.Add(new myAccount() {AccountNumber = “123”}; myAccountsList.Add(new myAccount() {AccountNumber = “456”}; myObject.ListOfAccounts = myAccountsList; var accountsQuery = from ax in myObject.ListOfAccounts join a in orgContext.CreateQuery() on ax.AccountNumber equals a.account_number select a; foreach(var item in accountsQuery) { Console.WriteLine(“Id of […]

当类型已知时,是否有任何技术理由使用或不使用C#中的var?

似乎越来越多的C#代码我读取使用var类型标识符: foreach (var itemChange in ItemChanges) { //… } 而不是明确说明类型: foreach (ItemChange itemChange in ItemChanges) { //… } 即使这种类型已知。 我仍在使用后一个显式版本,因为我认为稍后阅读它会更快地了解变量的类型,而不是使用var。 但是有任何技术理由使用其中一个吗?

何时使用StreamReader.ReadBlock()?

我想知道一种情况Read(char [],int,int)无法返回请求的所有字符,而ReadBlock()按预期返回所有字符(例如当StreamReader与FileStream对象的实例一起工作时)。

是否可以在C#中合并字符串和DBNull?

我正在编写一个C#例程来调用存储过程。 在我传入的参数列表中,其中一个值可能合法地为空。 所以我以为我会使用这样的一行: cmd.Parameters.Add(new SqlParameter(“@theParam”, theParam ?? DBNull.Value)); 不幸的是,这会返回以下错误: CS0019:运营商’??’ 不能应用于’string’和’System.DBNull’类型的操作数 现在,这似乎已经足够清楚了,但我不明白其背后的基本原理。 为什么这不起作用? (通常情况下,当我不明白为什么某些东西不起作用时,并不是它不起作用……而是我做错了。) 我是否真的需要将其延伸到更长的if-then声明中? 编辑:(顺便说一句,对那些建议只使用“null”的人来说,它不起作用。我原来认为null也会自动翻译成DBNull,但它显然没有。(谁知道?))

如何连接多个IObservable序列?

var a = Observable.Range(0, 10); var b = Observable.Range(5, 10); var zip = a.Zip(b, (x, y) => x + “-” + y); zip.Subscribe(Console.WriteLine); 打印 0 – 5 1 – 6 2 – 7 … 相反,我想加入相同的价值观 5 – 5 6 – 6 7 – 7 8 – 8 … 这是合并100个有序异步序列的问题的简化示例。 加入两个IEnumerable非常容易,但我找不到在Rx中做这样的事情的方法。 有任何想法吗? 更多关于投入和我想要实现的目标。 基本上,整个系统是一个实时管道,具有通过fork-join模式连接的多个状态机(聚合器,缓冲区,平滑filter等)。 RX是否适合实现这些东西? 每个输入都可以表示为 […]

.NETentity framework插入与批量插入

当我使用我的xxxContext对象并向表发出几个Add时,然后SaveChanges()entity framework如何将其解析为SQL? 它只是循环插入xxx或者如果有数百行,它是否足够智能发出批量插入命令? 奖金问题:如果它没有发出批量插入有没有办法强制它,所以我的数据库性能不会被单独的插入杀死? 或者批量到临时表,然后像Upsert一样合并到原始表?