我有兴趣为即将到来的项目使用Object-Relational Mapping包.该项目将作为ASP.NET应用程序开始,但将具有许多最终将与WinForms应用程序共享的功能.任何人都可以建议一些好的,免费的ORM包在ASP.NET和WinForms情况下都能很好地工作吗?
我在Stack Overflow上看到了一些关于委托,事件和这两个特性的.NET实现的非常好的问题.特别是一个问题," C#Events如何在幕后工作? ",产生了一个很好的答案,很好地解释了一些微妙的观点.
上述问题的答案提出了这一点:
当您声明类似字段的事件时......编译器会生成方法和私有字段(与委托类型相同).在类中,当您引用ElementAddedEvent时,您指的是该字段.在课外,你指的是这个领域
从同一问题("类字段事件 ")链接的MSDN文章添加:
引发事件的概念恰好等同于调用事件所代表的委托 - 因此,没有用于引发事件的特殊语言结构.
为了进一步检查,我构建了一个测试项目,以便查看IL被编译为一个事件和一个委托:
public class TestClass
{
public EventHandler handler;
public event EventHandler FooEvent;
public TestClass()
{ }
}
Run Code Online (Sandbox Code Playgroud)
我希望委托字段handler和事件FooEvent编译成大致相同的IL代码,并使用一些其他方法来封装对编译器生成的FooEvent字段的访问.但是IL产生的不是我预期的:
.class public auto ansi beforefieldinit TestClass
extends [mscorlib]System.Object
{
.event [mscorlib]System.EventHandler FooEvent
{
.addon instance void TestClass::add_FooEvent(class [mscorlib]System.EventHandler)
.removeon instance void TestClass::remove_FooEvent(class [mscorlib]System.EventHandler)
}
.method public hidebysig specialname rtspecialname instance void .ctor() cil managed
{
// Constructor IL hidden
}
.field private class [mscorlib]System.EventHandler …Run Code Online (Sandbox Code Playgroud) 我使用的方法被称为数万次,最近开始抛出异常.在大多数调试环境中,我会在此方法的顶部设置一个断点并运行直到我通过触发异常的参数值到达我感兴趣的调用.在这种情况下,这是不切实际的,所以我尝试设置一个断点,其条件只有在出现该参数值时才会中断.我在下面指出的位置创建了一个断点并给它一个条件str == "OffendingValue".
class Foo
{
// Bar() is called many, many times
void Bar(string str)
{
try
{
// Breakpoint inserted here
...
}
catch (Exception ex)
{
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,这样做会导致Visual Studio和我的应用程序在调试模式下停止运行.我的应用程序启动并输出一些简单的日志消息,然后完全停止响应.思考Visual Studio可能只是执行得有点慢,因为它需要做额外的工作来监控断点条件,我离开我的桌子15分钟,给它一些时间来运行.当我回来时,没有任何变化.我可以通过删除断点并使用相同的条件重新创建它来重现该条件.最奇怪的是,Break All debugging命令通常会破坏当前正在执行的语句上的程序执行是否为断点,当我启用了这个有问题的断点时,它根本不执行任何操作.
有没有人遇到与Visual Studio断点条件类似的行为?我可以毫无问题地使用命中计数条件.
当用户更改菜单中选定的项目时,可以轻松使用Angular数据绑定强制更改JavaScript属性.但是,当用于生成菜单的模型发生更改时,我无法弄清楚如何强制更改数据绑定属性.
这个小提琴演示了这种行为:http: //jsfiddle.net/2pHGX/.通过单击changeOptions更改模型会导致选择选项正确更改.但是数据绑定属性不会立即更改,只会在用户选择其他菜单选项时更改.
<body ng-app ng-controller="bodyCtrl">
<select ng-model="selection" ng-options="option for option in options">
</select>
<button ng-click="changeOptions()">changeOptions</button>
<br>
selection: {{selection}}
</body>
function bodyCtrl($scope) {
$scope.options = [10, 20, 30];
$scope.changeOptions = function() {
$scope.options = [11, 22, 33];
};
}
Run Code Online (Sandbox Code Playgroud)
我希望数据绑定属性在所选选项因任何原因发生更改时更新,因为用户选择了不同的选项,或者因为模型以及因此更改了选项.我可以使用它$watch,但我无法理解为什么单独的数据绑定是不够的.使用Angular实现此目的的最佳方法是什么?我是否误解了数据绑定的基本内容?