我一直在阅读Applicative Functors,我很难协调类别理论和函数式编程各自术语的不匹配.
虽然我查看了各种博客,但我用于本研究的最完整资源是:
在类别理论中,仿函数是从源类别到目标类别(在类别类别中)的态射."类别类别"包含一组对象,这些对象包含源类别和目标类别以及包含以下内容的仿函数集合:源类别的标识函数; 目标类别的身份仿函数; 并且,将源连接到目标的仿函数(如果源类别与目标类别相同并且所讨论的仿函数是标识,那么只需要那个仿函数).
在函数式编程中,applicative functors被描述为一对操作:
pure : a -> f a <*> : f ( a -> b) -> f a -> f b. 什么解释清楚地说明了应用函子的函数式编程定义与仿函数的类别理论定义之间的对应关系?
更具体地说,元组的哪些部分(pure,<*>)对应于:
注意:我认识到这可能是一个不完整的比喻,对于我提到的每个概念,可能没有一对一的对应关系.我故意避免分享我对这里明显的对应关系的猜测,以便使我的问题变得简单,并避免进一步混淆问题.
我有一个项目,我正在尝试在页面上注册自定义服务器控件(没有.ascx文件).我目前正在使用
namespace MyApp.Controls{
public class CustomControl: WebControl{
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["Text"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的页面上,
<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" %>
<myControls:CustomControl runat="server" Text="What up!" />
Run Code Online (Sandbox Code Playgroud)
我收到一个Parser Error,消息"Unknown server tag'myControls:CustomControl'."
我究竟做错了什么?
asp.net custom-server-controls servercontrols asp.net-customcontrol asp.net-controls
我只是想澄清一下.
我知道,如果我在之前的请求中设置了cookie,它将显示在我的Request.Cookies收藏中.
我想更新现有的Cookie.
我的Request.Cookies收藏中的cookie是否已复制到我的Response.Cookies收藏中?我是否需要使用相同的密钥添加新的cookie Response.Cookies.Add(),或者我是否需要使用Response.Cookies.Set()?
asp.net httpresponse httprequest httpcookie httpcookiecollection
Liskov替换原则要求子类型必须满足超类型的契约.根据我的理解,这将导致ReadOnlyCollection<T>违反Liskov. ICollection<T>合同公开Add和Remove运营,但只读子类型不符合本合同.例如,
IList<object> collection = new List<object>();
collection = new System.Collections.ObjectModel.ReadOnlyCollection<object>(collection);
collection.Add(new object());
-- not supported exception
Run Code Online (Sandbox Code Playgroud)
显然需要不可变的集合.有没有关于.NET的建模方法的事情?有什么更好的方法呢? IEnumerable<T>在一个集合中做得很好,至少看起来是不可改变的.但是,语义非常不同,主要是因为IEnumerable没有明确地暴露任何状态.
在我的特定情况下,我正在尝试构建一个不可变的DAG类来支持FSM.我显然在开始时需要AddNode/ AddEdge方法,但我不希望它一旦运行就可以更改状态机.我很难表示DAG的不可变和可变表示之间的相似性.
现在,我的设计涉及预先使用DAG Builder,然后创建一次不可变图,此时它不再可编辑.Builder和具体的不可变DAG之间唯一的通用接口是Accept(IVisitor visitor).我担心,面对可能更简单的选择,这可能是过度设计/过于抽象.与此同时,我无法接受我可以在我的图形界面上公开可能NotSupportedException在客户端获得特定实现时抛出的方法.处理这个问题的正确方法是什么?
c# liskov-substitution-principle immutability readonly-collection directed-acyclic-graphs
在下面的示例中,我想创建一个CSS规则,该规则仅适用于带有文本"Blockhead"的标题.
<div class="gumby">
<span class="pokey"></span>
<h3>Blockhead</h3>
<h3>Clay rules</h3>
</div>
Run Code Online (Sandbox Code Playgroud)
我可以使用括号,例如(.gumby > .pokey) + h3?如果没有,我的替代方案是什么?
在我的应用程序中,有时需要在一次操作中将10,000行或更多行保存到数据库中.我发现简单地迭代并一次添加一个项目可能需要花费半个多小时.
但是,如果我禁用AutoDetectChangesEnabled它需要约5秒(这正是我想要的)
我正在尝试向DbSet创建一个名为"AddRange"的扩展方法,该方法将禁用AutoDetectChangesEnabled,然后在完成时重新启用它.
public static void AddRange<TEntity>(this DbSet<TEntity> set, DbContext con, IEnumerable<TEntity> items) where TEntity : class
{
// Disable auto detect changes for speed
var detectChanges = con.Configuration.AutoDetectChangesEnabled;
try
{
con.Configuration.AutoDetectChangesEnabled = false;
foreach (var item in items)
{
set.Add(item);
}
}
finally
{
con.Configuration.AutoDetectChangesEnabled = detectChanges;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:有没有办法从DbSet获取DbContext?我不喜欢把它作为参数 - 感觉它应该是不必要的.
为什么ICustomAttributeProvider.GetCustomAttributes()返回object[]而不是Attribute[]?
在使用ICustomAttributeProvidermscorlib 的实现时是否有任何情况,系统程序集将返回非类型的对象Attribute?
我是.NET 4.0的Tuple类的忠实粉丝.
元组中的所有项都是不可变的.有明显的情况这是有益的(最明显的是当元组用于表示没有声明的临时ValueType时).
但是,我有一些用例,我可以看到具有setter的元组项目的好处(除了TRestType 中的Type参数Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>).鉴于我可以访问源代码和Matt Ellis关于"构建元组"的文章,看起来实现这样一个很简单MutableTuple<T1,T2,TEtc>.
微软显然决定使其Tuple不可变. 我是否有理由忽视我不应该使用可变的非元组项创建替代实现?
虽然我明白改变价值String.Empty会是一个坏主意,但我不明白为什么我不能这样做.
为了得到我的意思,请考虑以下课程:
public class SomeContext
{
static SomeContext(){}
public static readonly string Green = "Green";
public static readonly SomeContext Instance = new SomeContext();
private SomeContext(){}
public readonly string Blue = "Blue";
public static void PrintValues()
{
Console.WriteLine(new { Green, Instance.Blue, String.Empty }.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个小的控制台应用程序,试图操纵这三个只读字段.它可以成功地将蓝色和绿色变成粉红色,但是Empty保持不变:
SomeContext.PrintValues();
/// prints out : { Green = Green, Blue = Blue, Empty = }
typeof(SomeContext).GetField("Blue").SetValue(SomeContext.Instance, "Pink");
typeof(SomeContext).GetField("Green", BindingFlags.Public | BindingFlags.Static).SetValue(null, "Pink");
typeof(String).GetField("Empty", BindingFlags.Public | BindingFlags.Static).SetValue(null, "Pink");
SomeContext.PrintValues();
/// prints out : { …Run Code Online (Sandbox Code Playgroud) c# ×6
.net ×2
asp.net ×2
immutability ×2
.net-4.0 ×1
applicative ×1
c#-4.0 ×1
constants ×1
css ×1
css3 ×1
dbcontext ×1
dbset ×1
haskell ×1
httpcookie ×1
httprequest ×1
httpresponse ×1
liskov-substitution-principle ×1
oop ×1
reflection ×1
replace ×1
string ×1
tuples ×1