我在过去的两年里开发了一些基于Winforms Application的数据,一切正常.此应用程序构建在层(DataAccess,业务逻辑和UI)上.对于Businness Logic,我的所有对象都继承自一个名为BaseEntity的基类,其定义如下(有一些自定义对象和接口,与框架元素结合):
Run Code Online (Sandbox Code Playgroud)Public MustInherit Class BaseEntity Inherits SerializableObject Implements IEntity Implements IComparer, _ IEditableObject, _ INotifyPropertyChanging, INotifyPropertyChanged, _ IApplicationSecurity End Class
在同一个核心库中,我有一个通用的基本集合BaseEntityCollection.这些集合允许我为每个对象定义他的相关强类型集合,这在基于数据的应用程序中是非常有趣的.这是它的基本定义:
Public MustInherit Class BaseEntityCollection(Of T As BaseEntity)
Inherits BindingList(Of T)
Implements IEntityCollection
Implements INotifyPropertyChanged, INotifyPropertyChanging, ICopyable(Of T)
Implements IDisposable
Implements ISerializable
End Class
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用Winforms中正确数据绑定所需的所有内容:
我也对新技术感兴趣,所以我最近看了一些关于WPF的网络直播.在这些网络广播中,它们用作收集和数据绑定支持ObservableCollection(Of T)的基类.
我正在考虑将我的一些应用程序从Winforms迁移到WPF以用于UI层.
我的问题是,对于我的业务逻辑,最好是基于BindingList(Of T)保留我的集合,还是应该更改我的基本集合类以使其继承自ObservableCollection(Of T).我想为我的所有项目保留一个独特的基础集合,可以在Winforms应用程序,WPF应用程序或ASP.NET中使用.我也在我的项目中使用Linq to Objects,所以我没有限制只保留基于框架2.0的项目.
谢谢,
CLABER
我经常遇到我想在调试时禁用某些代码而不实际更改代码的情况.
我最终做的是有一个断点(通常是有条件的)然后当断点触发时我执行一个Set Next Statement.当代码被多次到达时,这可能是非常耗费人力的,所以我创建了一个宏:
Sub Skip3Lines()
DTE.ActiveDocument.Selection.LineDown(False, 3)
DTE.Debugger.SetNextStatement()
End Sub
Run Code Online (Sandbox Code Playgroud)
然后我将断点更改为命中点(right-click -> When Hit...
)并告诉它执行此宏.
Visual Studio非常乐意吐出以下对话框:
---------------------------
Error
---------------------------
A macro called a debugger action which is not allowed while responding to an event or while being run because a breakpoint was hit.
---------------------------
OK
---------------------------
有谁知道怎么解决这个问题?
背景:
Firefox 3包含 SQLite版本3.5.9.Firefox还允许使用javascript编写的扩展,并可以调用嵌入式SQLite引擎.
正如所料,执行以下SQL语句'SELECT"TEXT"REGEXP"T*";' 由于SQLite中没有本地包含的REGEXP函数,因此会出错.
javascript包含内置的regexp功能.
SQLite允许通过SELECT load_extension('filename')加载扩展;
问题: 是否可以在SQLite中加载一个用javascript编写的可以执行REGEXP的扩展?
我需要创建大的相对较大(1-8 GB)的文件.使用C或C++在Windows上执行此操作的最快方法是什么?我需要动态创建它们,速度确实是一个问题.文件将用于存储仿真,即将在不同的偏移量中随机访问,我需要预先分配所有存储但未初始化,目前我们正在使用虚拟数据写入所有存储,并且花费的时间太长.
谢谢.
我刚刚完成了一个5000行的PHP应用程序,现在正在进行测试和调试.在结束前不久,我偶然发现了PHPLint.我真的很喜欢这个想法 - 有一些特殊的评论,我可以指定变量类型,然后工具检查我的代码是否存在各种错误.整齐.我认为在开发结束时我会评论我的代码并在其上运行PHPLint.
不幸的是我遇到了一个小问题 - 在Windows下,PHPLint无法编译.嗯,它是,但只有Cygwin,我不想再安装那件事.我也不想用Linux或其他东西获得虚拟机.当然,我会,如果没有其他选择,但首先我想探索其他选择.
那么 - 在Windows下运行的PHPLint是否还有其他选择?我的意思是代码检查.我不关心文档生成部分.
我通过COM自动化使用Excel(在c#中),但似乎问题无法控制在盒子上启动的excel版本 - 我们同时使用Excel 9和Excel 11和一组特定的电子表格需要excel 9否则他们不会工作.
我包括excel 9 com参考,但在另一个人机器excel 11开始.我怎样才能解决这个问题 ?
我试图弄清楚在PHP中处理错误是否有一个好的或更好的方法,而不是我在下面做的.如果电话有问题,我想抛出异常parse_ini_file
.这有效,但是有更优雅的方法来处理错误吗?
public static function loadConfig($file, $type)
{
if (!file_exists($file))
{
require_once 'Asra/Core/Exception.php';
throw new Asra_Core_Exception("{$type} file was not present at specified location: {$file}");
}
// -- clear the error
self::$__error = null;
// -- set the error handler function temporarily
set_error_handler(array('Asra_Core_Loader', '__loadConfigError'));
// -- do the parse
$parse = parse_ini_file($file, true);
// -- restore handler
restore_error_handler();
if (!is_array($parse) || is_null($parse) || !is_null(self::$__error))
{
require_once 'Asra/Core/Exception.php';
throw new Asra_Core_Exception("{$type} file at {$file} appears to be
}
}
Run Code Online (Sandbox Code Playgroud)
__ loadConfigError …
哪个是正确的做法?
if (myObj['key'] == undefined)
Run Code Online (Sandbox Code Playgroud)
要么
if (myObj['key'] == null)
Run Code Online (Sandbox Code Playgroud)
要么
if (myObj['key'])
Run Code Online (Sandbox Code Playgroud) 我需要从一个更大的表中选择大量的行,这些表是在自动增量标识列上键入的.我有我想要选择的每一行的主键值,但它可能非常大.
通常但并非总是,所选择的行是连续的,因此我实现了一种机制,将select转换为一组范围子句,用于所有聚集在一起的条目([PrimaryKey] BETWEEN 151 AND 217),以及一个回退方法,用IN子句选择所有隔离的条目.
最后我得到了这样的东西
SELECT * FROM Table WHERE ([PrimaryKey] BETWEEN 151 AND 217) OR ([PrimaryKey] BETWEEN 314 AND 378) OR ...
OR [PrimaryKey] IN (1,3,7,14,147...)
Run Code Online (Sandbox Code Playgroud)
这适用于我主要使用大范围的情况,但随着查询变大而崩溃.我只是遇到了一个退化的案例,我有大量的"对"条目,在我放弃它之前,每次尝试描述执行计划的时间超过15分钟,为2个条目生成BETWEEN语句.
我想到的第一件事就是我可以改变开始生成范围的阈值,而不是个别值,超过2(10或许10?),但我想知道是否有更好的解决方案.
我使用shell-command一个批次(默认绑定到M-!),但我经常对我正在编辑的缓冲区做一些事情.而不是键入缓冲区名称(并且shell命令中没有文件名完成功能,唉!),每当我按下键时,有一个快捷键(比如f3)为我插入该名称是很好的.
问题是我不想全局绑定密钥(我在其他上下文中使用f3进行其他操作),只有在shell-command提示时才在迷你缓冲区中使用.编写一个lisp函数来插入当前缓冲区名称很容易,但是我应该修改哪个模式的键映射来将键绑定到该函数?
或者,是否有任何lisp代码/包在shell-command中提供文件名完成,类似于bash的做法?我知道正常的Mx shell完成了,但是在迷你缓冲区中输入命令的便利性很难放弃;)
编辑:
这就是我想要的,取自怀远的回答,其中一些修正来自http://osdir.com/ml/emacs.sources/2002-04/msg00022.html
(define-key minibuffer-local-map
[f3] (lambda () (interactive)
(insert (buffer-name (current-buffer-not-mini)))))
(defun current-buffer-not-mini ()
"Return current-buffer if current buffer is not the *mini-buffer*
else return buffer before minibuf is activated."
(if (not (window-minibuffer-p)) (current-buffer)
(if (eq (get-lru-window) (next-window))
(window-buffer (previous-window)) (window-buffer (next-window)))))
Run Code Online (Sandbox Code Playgroud) javascript ×2
php ×2
windows ×2
automation ×1
bindinglist ×1
c ×1
com ×1
data-binding ×1
debugging ×1
emacs ×1
excel ×1
file ×1
file-io ×1
object ×1
sql ×1
sql-server ×1
sqlite ×1
validation ×1
winforms ×1