我最近开始在我的.NET 4.0应用程序中使用Entity Framework 4.0,并对与池化相关的一些事情感到好奇.
据我所知,连接池由ADO.NET数据提供程序管理,在我的情况下是MS SQL服务器.当您实例化新的实体context(ObjectContext)时,这是否适用,即无参数new MyDatabaseModelEntities()?
a)为应用程序创建全局实体上下文(即一个静态实例)或b)使用using块为每个给定操作/方法创建和公开实体上下文有哪些优点和缺点.
我应该了解的某些场景的任何其他建议,最佳实践或常用方法?
最近我偶然发现了一些叫做Prism的东西.运行该项目的微软将其描述为
WPF和Silverlight中的复合应用程序指南.
即使在阅读了更详细的描述之后,我也几乎不知道它实际上是什么,我害怕.
我希望有人可以给我一个明确的简洁解释,说明Prism实际上是什么以及为什么我应该学习它.我已经成为WPF开发人员几年了,使用MVVM我的公平份额,并且最近遇到过使用Prism的人,但个人感觉有点不在这里.
特别是,我想知道以下几点:
Prism字面上只是(或主要)是MSDN网站上的小册子吗?它是否包含任何库,如果是这样的话究竟是什么?
Prism是MVVM框架吗?我应该将它作为"官方Microsoft MVVM框架"而不是其他人或我自己的吗?
它是否提供依赖注入?它是否与MEF有关?
作为WPF/Silverlight开发人员,我应该知道Prism的作用.
这是挑战(我自己的发明,但如果以前出现在网络的其他地方,我不会感到惊讶).
编写一个函数,该函数采用单个参数,该参数是简单数学表达式的字符串表示形式,并将其作为浮点值进行计算."简单表达"可以包括以下任何一种:正十进制数或负十进制数,+,-,*,/,(,).表达式使用(正常)中缀表示法.操作员应按其出现的顺序进行评估,即不像在BODMAS中那样进行 评估,但当然应该正确观察括号.该函数应该为此表单的任何可能表达式返回正确的结果.但是,该函数不必处理格式错误的表达式(即语法错误的表达式).
表达的例子:
Run Code Online (Sandbox Code Playgroud)1 + 3 / -8 = -0.5 (No BODMAS) 2*3*4*5+99 = 219 4 * (9 - 4) / (2 * 6 - 2) + 8 = 10 1 + ((123 * 3 - 69) / 100) = 4 2.45/8.5*9.27+(5*0.0023) = 2.68...
我预计会有某种形式的"作弊"/狡猾,所以请让我预先反对它!通过作弊,我指的是eval在动态语言(如JavaScript或PHP)中使用或等效函数,或者同时编译和执行代码.(我认为我的"没有BODMAS"的规格几乎可以保证这一点.)除此之外,没有任何限制.我在这里预计会有一些Regex解决方案,但不仅仅是这样,我们会感到很高兴.
现在,我主要对C#/ .NET解决方案感兴趣,但是任何其他语言都是完全可以接受的(特别是F#和Python用于功能/混合方法).我还没有决定我是否会接受最短或最巧妙的解决方案(至少对于语言而言)作为答案,但我欢迎任何语言的任何形式的解决方案,除了我刚才禁止的!
我现在在这里发布了我的C#解决方案(403个字符).更新: …
我最近正在努力教自己解析器(语言/无上下文语法)是如何工作的,除了一件事以外,大部分解析器似乎都有意义.我特别关注LL(k)语法,其中两个主要算法似乎是LL解析器(使用堆栈/解析表)和递归下降解析器(简单地使用递归).
据我所知,递归下降算法适用于所有LL(k)语法,可能更多,而LL解析器适用于所有LL(k)语法.然而,递归下降解析器显然要比LL解析器简单得多(正如LL一个比LR一个简单).
所以我的问题是,使用任何一种算法时可能遇到的优点/问题是什么?为什么有人会选择LL而不是递归下降,因为它适用于同一组语法并且实现起来比较棘手?
grammar parsing recursive-descent context-free-grammar ll-grammar
在代码审查中,我偶然发现了这个(简化的)代码片段以取消注册事件处理程序:
Fire -= new MyDelegate(OnFire);
Run Code Online (Sandbox Code Playgroud)
我认为这不会取消注册事件处理程序,因为它创建了一个之前从未注册过的新委托.但是搜索MSDN我发现了几个使用这个习惯用法的代码示例.
所以我开始了一个实验:
internal class Program
{
public delegate void MyDelegate(string msg);
public static event MyDelegate Fire;
private static void Main(string[] args)
{
Fire += new MyDelegate(OnFire);
Fire += new MyDelegate(OnFire);
Fire("Hello 1");
Fire -= new MyDelegate(OnFire);
Fire("Hello 2");
Fire -= new MyDelegate(OnFire);
Fire("Hello 3");
}
private static void OnFire(string msg)
{
Console.WriteLine("OnFire: {0}", msg);
}
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,发生了以下情况:
Fire("Hello 1"); 按预期产生了两条消息.Fire("Hello 2");制作了一条消息!new代表工作!Fire("Hello 3");扔了一个NullReferenceException.Fire为null …好的,所以这可能是一个有点愚蠢的问题,肯定有明显的答案,但我很好奇,如果我错过了任何细微之处.
public在internal类中internal声明的成员与在类中声明的成员之间的可见性/可用性方面是否有任何区别internal?
即之间
internal class Foo
{
public void Bar()
{
}
}
Run Code Online (Sandbox Code Playgroud)
和
internal class Foo
{
internal void Bar()
{
}
}
Run Code Online (Sandbox Code Playgroud)
如果您将方法声明为publicand virtual,然后在派生类中对其进行覆盖,则public使用此修饰符的原因很明显.然而,这是唯一的情况......我错过了别的什么吗?
我试图弄清楚如何定义一个适用于多种类型参数的函数(例如int和int64).据我了解,F#中无法实现函数重载(当然编译器会抱怨).以下面的功能为例.
let sqrt_int = function
| n:int -> int (sqrt (float n))
| n:int64 -> int64 (sqrt (float n))
Run Code Online (Sandbox Code Playgroud)
编译器当然抱怨语法无效(似乎不支持模式匹配中的类型约束),尽管我认为这说明了我想要实现的内容:一个对多个参数类型进行操作并返回相应值的函数类型.我觉得在F#中使用泛型类型/类型推断/模式匹配的某种组合是可能的,但语法已经躲过了我.我也尝试过使用:?操作者(动态型测试)和当在模式匹配块子句,但这仍然会产生各种错误.
由于我对这门语言不熟悉,我很可能会尝试在这里做一些不可能的事情,所以如果有其他解决方案,请告诉我.
我最近升级到Textmate 2,现在我的dotfiles没有显示在文件浏览器中.显然,在处理.htaccess文件之类的东西时这很重要.
有没有办法启用此功能?
在实现IDisposable时,我认为在对象被处理后不应该调用的每个方法都应该抛出ObjectDisposedException.但是应该传递给异常构造函数的name对象的标准是什么?
.net ×3
c# ×2
parsing ×2
ado.net ×1
class ×1
code-golf ×1
database ×1
delegates ×1
dictionary ×1
dotfiles ×1
events ×1
f# ×1
generics ×1
grammar ×1
idisposable ×1
internal ×1
ll-grammar ×1
map ×1
math ×1
mvvm ×1
overloading ×1
prism ×1
public ×1
text-editor ×1
text-parsing ×1
textmate2 ×1
typeclass ×1
wpf ×1
yaml ×1