在.NET中有一个null引用,它在任何地方用来表示对象引用是空的,然后有DBNull数据库驱动程序(和其他几个)用来表示......几乎相同的东西.当然,这会产生很多混乱,转换例程必须被制作出来,等等.
那么为什么最初的.NET作者决定这样呢?对我来说没有任何意义.他们的文档也没有意义:
DBNull类表示不存在的值.例如,在数据库中,表行中的列可能不包含任何数据.也就是说,该列被认为根本不存在而不仅仅是没有值.DBNull对象表示不存在的列.此外,COM interop使用DBNull类来区分VT_NULL变量(表示不存在的值)和VT_EMPTY变量(表示未指定的值).
什么是关于"不存在的列"的废话?存在一列,它只是没有特定行的值.如果它不存在,我会尝试访问特定的单元格,而不是DBNull!我可以理解区分VT_NULL和之间的必要性VT_EMPTY,但是为什么不做一个COMEmpty类呢?这将是整个.NET框架中更适合的.
我错过了什么吗?任何人都可以解释为什么DBNull被发明以及它有助于解决的问题?
我想知道什么是Windows API函数(如果存在),它提供有关上一次Windows重新启动源的信息.有三个主要可能的原因:
我可以越多越好.但是,我至少需要知道主要原因是什么.
我需要支持Windows Vista和Windows 7.
回答:
似乎没有直接的API来获取该信息.相反,我们必须收获Windows事件日志.系统重新引导信息位于事件查看器/ Windows日志/系统中.以下是事件ID提供的各种信息:
我还没有看到断电和系统崩溃之间的区别,但这是一个好的开始.
直接问题:如果我有两个具有相同名称的文件(但在不同的目录中),似乎只有Visual Studio 2005可以透明地处理它?VS 2008和2010需要一堆调整?除了我的命名惯例,我做错了吗?
背景:
我正在开发C++统计库......我有两个文件夹:
/ Univariate
Normal.cpp
Normal.h
Beta.cpp
Beta.h
Adaptive.cpp
Adaptive.h
/ Multivariate
Normal.cpp
Normal.h
Beta.cpp
Beta.h
Adaptive.cpp
Adaptive.h
Run Code Online (Sandbox Code Playgroud)
我需要支持交叉编译 - 我使用g ++/make将这些相同的文件编译到Linux中的库中.他们工作得很好.
我一直在使用Visual Studio 2005而没有问题,但我需要升级到Visual Studio 2008或2010(目前在nVidia的nsight工具上流口水).但是,如果我将文件添加到具有相同名称的项目中(即使它们位于不同的目录中),我会遇到问题.我愿意改变我的命名惯例,但是我很好奇其他人是否遇到过这个问题并且找到了任何记录良好的解决方案?
我通过,如果我从2005年项目升级至2010年的项目,似乎VS 2010的事实进一步猛然一惊是能够正确地处理在不同目录中的两个名称相同的源文件; 但是,如果我删除其中一个重复文件,然后将其添加回项目,我会收到以下警告:
Distributions\Release\Adaptive.obj:警告LNK4042:指定了多次的对象; 临时演员被忽略了
现在我将中间目录指定为$(ProjectName)\ $(配置) - 我需要将我的目标文件放在与源代码树不同的位置.所以我可以看到为什么它将对象文件复制在一起,但是当项目从2005年转换到2008年或2010年时,会添加一堆条件编译:
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
Run Code Online (Sandbox Code Playgroud)
可以从C/C++ - >输出文件 - >"对象文件名"和"XML文档文件名"中的源文件属性页访问它们.但是,如果我只是直接添加文件(或删除并重新添加它们),VS在我尝试编译之前不会抱怨,但也从不添加条件指令 - 所以为了使事情正常工作,我必须为每个配置自己添加条件指令.我是犯了错误/不好的假设还是我在VS 2008/2010中发现了一个有效的错误?
c++ projects-and-solutions naming-conventions visual-studio-2010 visual-studio-2008
直接问题: 如何在visual studio 2010中创建一个简单的hello world CUDA项目?
背景: 我写过CUDA内核.我非常熟悉Visual Studio 2005中的.vcproj文件 - 手动调整了几个.在VS 2005中,如果我想构建一个CUDA内核,我会添加一个自定义构建规则,然后显式定义nvcc调用以构建文件.
我已经迁移到Win 7和VS 2010,因为我真的想尝试nSight.我安装了nSight 1.5.但这就是我完全迷失的地方.如果我像以前一样继续,nvcc报告它只支持msvc 8.0和9.0.但该网站明确表示它支持VS 2010.
我在其他地方读到了我需要安装VS 2008(msvc 9.0) - 我的话.现在这样做.
但我猜测,我的问题至少部分来自自产自定义生成工具的规格干. 一些 网站谈论添加*.rules文件添加到构建,但我已经收集,这是只适用于VS 2008在"构建自定义"我看到CUDA 3.1和3.2,但是当我添加内核他们AREN项目没有建成. 另一个网站宣称,关键是三个文件:Cuda.props Cuda.xml Cuda.targets,但它并没有说如何或在哪里添加这些文件-或者更确切地说,我会赌我只是不明白的说明在网站上引用.
因此,没有人知道如何创建在VS 2010中一个简单的项目,该项目构建了一个CUDA内核-使用无论是nSight 1.5设置或NvCudaRuntimeApi.v3.2.rules文件所附带CUDA 3.2 RC?
提前致谢!我会提供赏金,但我总共得到65分.
根据MSDN BOL(联机丛书)对SOME的描述 任何(Transact-SQL),
有些和任何东西是等价的.
使用SOME |确实有意义 任何使查询更具可读性的方法.
但这是为什么在TSQL中有2个关键字,它们服务于完全相同的目的的唯一原因是什么?
是否有任何历史原因导致它们具有相同的功能?
我遇到的唯一解决方案是使用正则表达式并递归替换第一个目录,直到得到一个没有斜杠的单词.
gsub("/\\w*/","/",gsub("/\\w*/","/",getwd()))
Run Code Online (Sandbox Code Playgroud)
有什么稍微优雅的吗?(而且更便携?)
我正在尝试使用javascript来突出显示用户在单击某个奇数突出显示按钮时选择的文本(如<span style ="background-color:yellow">突出显示的文本</ span>).它只需要与WebKit或Firefox一起使用,但它似乎几乎不可能,因为它必须在以下情况下工作:
<p>this is text</p>
<p>I eat food</p>
Run Code Online (Sandbox Code Playgroud)
当用户在浏览器中选择"is text"到"I eat"时(不能只是在那里放一个跨度).
这种情况:
<span><span>this is text</span>middle text<span>this is text</span></span>
Run Code Online (Sandbox Code Playgroud)
当用户在浏览器中选择"is text"到"this is"时(即使你可以在选择中的每个元素周围包含你的高亮显示,我希望你看到你试图让中间文本突出显示).
这个问题似乎没有在任何地方得到解决,坦率地说我怀疑这是可能的.
如果你可以从选择中得到的Range作为一个完整的html字符串,可以解析然后替换,这是可能的,但据我所知,你不能得到一个范围的原始html ..可怜.
我有一个列向量A,长度为10个元素.我有一个10乘10的矩阵B.B的内存存储是列专业.我想用列向量A 覆盖B中的第一行.
显然,我可以这样做:
for ( int i=0; i < 10; i++ )
{
B[0 + 10 * i] = A[i];
}
Run Code Online (Sandbox Code Playgroud)
我把零放在0 + 10 * i一边突出显示B使用列主存储(零是行索引).
在今晚CUDA-land的一些恶作剧之后,我想到可能有一个CPU功能来执行一个跨步的memcpy?我想在低级别,性能将取决于是否存在一个跨步加载/存储指令,我不记得在x86汇编中?
private object lockObj = new object();
private Dictionary<int, string> dict = new Dictionary<int, string>();
public string GetOrAddFromDict(int key)
{
string value;
// non-locked access:
if (dict.TryGetValue(key, out value))
return value;
lock (this.lockObj)
{
if (dict.TryGetValue(key, out value))
return value;
string newValue = "value of " + key; // place long operation here
dict.Add(key, newValue);
return newValue;
}
}
Run Code Online (Sandbox Code Playgroud)
问题a:它是否是线程安全的?如果是,为什么?
问题b:这个双TryGetValue()模式是如何调用的?