我正在编写一些数据访问代码,我想检查数据库中潜在的"无效"数据状态.例如,我从数据库中返回一个小部件,我只期望一个.如果我得到两个,我想抛出异常.即使参照完整性应该防止这种情况发生,我也不希望依赖于DBA永远不会改变模式(为了澄清这一点,如果删除了主键约束并且我得到了一个欺骗,我想快速而清楚地打破).
我想使用System.IO.InvalidDataException,除了我没有处理文件流,所以它会产生误导.我最终得到了一个通用的applicationexception.谁有更好的主意?
我经常需要访问$config视图中的变量.我知道我可以将它们从控制器传递给load->view().但明确地做这件事似乎过分了.
是否有一些方法或技巧可以$config从CI视图访问变量而不会打扰带有备用代码的控制器?
在Windows 7 32位下运行时,以下代码将导致硬故障:
void CTestView::OnDraw(CDC* /*pDC*/)
{
*(int*)0 = 0; // Crash
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我在Windows 7 64bit上尝试这个,我只是在输出窗口中得到这个:
Test.exe中0x13929384处的第一次机会异常:0xC0000005:访问冲突写入位置0x00000000.
Test.exe中0x77c6ee42的第一次机会异常:0xC0150010:当前执行的线程未激活的激活上下文无效.
这是什么原因?我知道这是一个硬件异常(http://msdn.microsoft.com/en-us/library/aa363082.aspx),但为什么在32位和64位下运行时有区别?我能做些什么来正确处理这些错误?因为它们应该被捕获和修复,而不是目前发生的事情,Windows只是继续向应用程序发送消息并让它运行(因此用户和开发人员完全没有意识到实际发生了任何问题).
更新:
我们的常规崩溃报告软件使用SetUnhandledExceptionFilter但不会在x64上调用WndProc中的硬件异常.有没有人有关于此的任何信息,或解决方法?
Update2:
我在Microsoft Connect上报告了这个问题:https:
//connect.microsoft.com/VisualStudio/feedback/details/550944/hardware-exceptions-on-x64-machines-are-silently-caught-in-wndproc-消息
是否可以构造一个PCRE样式的正则表达式,它只匹配列表中的每个字母一次?
例如,如果您有字母"lrsa",并尝试匹配单词列表:
^[lrsa]*m[lrsa]*$
Run Code Online (Sandbox Code Playgroud)
你要匹配"lams"(有效),还要匹配"喇嘛"(因为你只有一个"a"而无效).如果你的信件是"lrsaa",你会想要匹配"喇嘛".
这是正确的表达式,或者我应该以编程方式处理它?
我正在从一个文件中读取数据,遗憾的是,这种文件有两种类型的字符编码.
有一个标题和一个正文.标头始终为ASCII,并定义正文编码的字符集.
标头不是固定长度,必须通过解析器运行以确定其内容/长度.
该文件也可能非常大,所以我需要避免将整个内容带入内存.
所以我开始使用单个InputStream.我最初使用带有ASCII的InputStreamReader包装它并解码标头并提取主体的字符集.都好.
然后我创建一个具有正确字符集的新InputStreamReader,将其放在同一个InputStream上并开始尝试读取正文.
不幸的是,javadoc证实了这一点,即InputStreamReader可能会选择提前读取以达到效率目的.因此,标题的阅读会咀嚼身体的一部分/全部.
有没有人有解决这个问题的建议?会手动创建一个CharsetDecoder并一次输入一个字节但是一个好主意(可能包含在自定义的Reader实现中吗?)
提前致谢.
编辑:我的最终解决方案是编写一个没有缓冲的InputStreamReader,以确保我可以解析标题而不会咀嚼身体的一部分.虽然这不是非常有效,但我使用BufferedInputStream包装原始InputStream,因此它不会成为问题.
// An InputStreamReader that only consumes as many bytes as is necessary
// It does not do any read-ahead.
public class InputStreamReaderUnbuffered extends Reader
{
private final CharsetDecoder charsetDecoder;
private final InputStream inputStream;
private final ByteBuffer byteBuffer = ByteBuffer.allocate( 1 );
public InputStreamReaderUnbuffered( InputStream inputStream, Charset charset )
{
this.inputStream = inputStream;
charsetDecoder = charset.newDecoder();
}
@Override
public int read() throws IOException
{
boolean middleOfReading = false;
while ( true …Run Code Online (Sandbox Code Playgroud) 嗨,我想比较2个数组的所有值,最后得到一个真或假.我正在使用下面的代码,并认为结果将是错误的.但事实并非如此,当最后一行运行时,我希望显示类似的东西
数组([0] => 0)
但我没有显示,所以假设php很高兴没有区别
我的代码是
$before = array('1', '1', '0', '0', '1', '0' ) ;
$after = array('0', '1', '0', '0', '1', '0' ) ;
$new_array= array_diff($before,$after);
print_r ($new_array) ;
Run Code Online (Sandbox Code Playgroud)
当然array_diff应该发现差异吗?任何帮助都会非常感谢
我刚刚升级到.NET 4,我的ASP.NET图表控件不再显示.
对于.NET 3.5,控件生成的HTML看起来像这样:
<img id="20_Chart" src="/ChartImg.axd?i=chart_5f6a8fd179a246a5a0f4f44fcd7d5e03_0.png&g=16eb7881335e47dcba16fdfd8339ba1a" alt="" style="height:300px;width:300px;border-width:0px;" />
Run Code Online (Sandbox Code Playgroud)
现在,对于.NET 4,它看起来像这样(注意源路径的变化):
<img id="20_Chart" src="/Statistics/Summary/ChartImg.axd?i=chart_5f6a8fd179a246a5a0f4f44fcd7d5e03_0.png&g=16eb7881335e47dcba16fdfd8339ba1a" alt="" style="height:300px;width:300px;border-width:0px;" />
Run Code Online (Sandbox Code Playgroud)
该图表位于MVC局部视图中,该文件夹位于名为"Statistics"的MVC Area文件夹和名为"Summary"的MVC Views文件夹中(即"/ Areas/Statistics/Views/Summary"),因此这显然是改变路径来自.
我所做的就是将System.Web.DataVisualization程序集从3.5切换到4.0.
任何帮助非常感谢.
这主要是出于好奇,可能是一个愚蠢的问题.:)
我有这样的方法:
public void MyMethod(string arg1, string arg2, int arg3, string arg4, MyClass arg5)
{
// some magic here
}
Run Code Online (Sandbox Code Playgroud)
没有参数可以为null,并且所有字符串参数都不能相等String.Empty.
而不是我有一个大的列表:
if(arg1 == string.Empty || arg1 == null)
{
throw new ArgumentException("issue with arg1");
}
Run Code Online (Sandbox Code Playgroud)
是否有更快捷的方法来检查所有字符串参数?
如果我的问题不明确,请道歉.
谢谢!
我有一个问题可能有点傻,因为我很确定我可能已经知道了答案.
假设你有静态库A,动态共享对象库B和Linux下的程序C. 假设库A调用库B中的函数,并且程序从库A调用函数.现在假设C中调用的所有函数都不使用B中的函数.
要编译C,仅仅链接A和省略B就可以了,而且你的程序C可以在没有安装库B的系统上运行吗?