我想阻止对象的进一步处理,如果它是null.
在下面的代码中,我通过以下任一方法检查对象是否为null:
if (!data.Equals(null))
Run Code Online (Sandbox Code Playgroud)
和
if (data != null)
Run Code Online (Sandbox Code Playgroud)
不过,我收到NullReferenceException的dataList.Add(data).如果对象为null,则它应该永远不会进入if-statement!
因此,我问这是否是检查对象是否为null的正确方法:
public List<Object> dataList;
public bool AddData(ref Object data)
bool success = false;
try
{
// I've also used "if (data != null)" which hasn't worked either
if (!data.Equals(null))
{
//NullReferenceException occurs here ...
dataList.Add(data);
success = doOtherStuff(data);
}
}
catch (Exception e)
{
throw new Exception(e.ToString());
}
return success;
}
Run Code Online (Sandbox Code Playgroud)
如果这是检查对象是否为null的正确方法,那么我做错了什么(如何防止对对象进一步处理以避免NullReferenceException)?
在Xpath中,我想要选择等于特定值的元素.
示例XML数据:
<aaa id="11" >
<aaa id="21" >
<aaa id="31" ></aaa>
<bbb id="32" >
<aaa id="41" ></aaa>
<bbb id="42" ></bbb>
<ccc id="43" ></ccc>
<ddd id="44" >qwerty</ddd>
<ddd id="45" ></ddd>
<ddd id="46" ></ddd>
</bbb>
</aaa>
<bbb id="22" >
<aaa id="33" >qwerty</aaa>
<bbb id="34" ></bbb>
<ccc id="35" ></ccc>
<ddd id="36" ></ddd>
<ddd id="37" ></ddd>
<ddd id="38" ></ddd>
</bbb>
<ccc id="23" >qwerty</ccc>
<ccc id="24" ></ccc>
</aaa>
Run Code Online (Sandbox Code Playgroud)
现在,使用XPath:
//ccc[.='qwerty']
Run Code Online (Sandbox Code Playgroud)
我得到了正确的预期结果:
Name Value
ccc qwerty
Run Code Online (Sandbox Code Playgroud)
现在,使用XPath:
//aaa[.='qwerty']
Run Code Online (Sandbox Code Playgroud)
我得到了意外的结果:
Name Value
aaa …Run Code Online (Sandbox Code Playgroud) 我不确切地知道如何搜索这个...所以我没有任何运气找到任何东西..:S
我需要在C中实现延时.
例如,我想做一些事情,然后等一分钟,然后继续做一些事情.
这有意义吗?谁能帮我吗?
我想知道在下面的代码中使用关键字"as"是否是一种安全的方式(即不会爆炸)在C#中进行转换:
public void abc(ref Object dataSource)
{
DataTable table = dataSource as DataTable;
}
Run Code Online (Sandbox Code Playgroud)
有更安全的铸造方式吗?
我想如何正确使用XPath中的"not".我似乎无法让它与属性一起工作.
假设我有这个表达式://*[@name = 'Bob']它是有效的,并将返回名称属性等于'Bob'的所有节点.
现在,如果我想要所有名称属性不等于'Bob'的节点,我需要使用XPath,例如://*[@name not(='Bob')]但这是无效的.
我已经尝试了多种组合,其中not()被放置在不同的顺序中,但我似乎无法使其工作.有人可以告诉我如何正确使用not()吗?
此外,使用元素而不是属性时订单是否会更改?如://name[text() = 'Bob']
谢谢!:)
在C#中,通过引用传递:
void MyFunction(ref Dog dog)
Run Code Online (Sandbox Code Playgroud)
但是到目前为止我看到的C++/CLI代码示例中没有使用ref但是使用了^符号:
void MyFunction(Dog ^ dog)
Run Code Online (Sandbox Code Playgroud)
参数传递时是否使用^符号直接替换ref?还是有其他一些我不知道的含义?
附加问题:我也看到了很多:
Dog ^ myDog = gcnew Dog();
Run Code Online (Sandbox Code Playgroud)
看起来它*在C++中像(指针)一样使用.它的工作原理是否类似?
谢谢!
我想了解一下我收到的错误:
托管调试助手'FatalExecutionEngineError'检测到'C:\ app.exe'中存在问题.附加信息:运行时遇到致命错误...此错误可能是CLR中的错误或用户代码的不安全或不可验证部分.此错误的常见来源包括COM-interop或PInvoke的用户封送错误,这可能会破坏堆栈."
我不仅要了解错误本身,还要了解CLR可能发挥作用的方式/方式,而且我从未真正听说过COM-intercop或PInvoke ......所以对这些内容的一些见解也会有所帮助.
此外,真正奇怪的部分是,如果我继续通过断点并且不进入或超过,我没有看到错误.但是,如果我逐行执行,则会弹出错误!任何人都可以解释为什么我只是在走过时看到它?
不确定其他哪些信息会有用..请告诉我(当然很好!)我可以添加的内容.
先感谢您!:)
我需要一个XSL解决方案来用新节点替换XML节点.
假设我有以下现有的XML结构:
<root>
<criteria>
<criterion>AAA</criterion>
</criteria>
</root>
Run Code Online (Sandbox Code Playgroud)
我想用以下内容替换一个标准节点:
<criterion>BBB</criterion>
<criterion>CCC</criterion>
<criterion>DDD</criterion>
Run Code Online (Sandbox Code Playgroud)
这样最终的XML结果是:
<root>
<criteria>
<criterion>BBB</criterion>
<criterion>CCC</criterion>
<criterion>DDD</criterion>
</criteria>
</root>
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用substring-before和substring-after来复制结构的前半部分,然后只复制下半部分(为了在两半之间填充我的新节点)但是看起来子串仅起作用识别节点标签之间的文本,而不是像我想要的那样识别标签本身.:( :(
还有其他方法吗?
我是Visual Studio 2010的新手,如何修复以下错误?
错误:命名空间"System.Security.Cryptography"中不存在类型或命名空间名称"Xml"(您是否缺少程序集引用?)
用代码:
using System;
using System.Xml;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
Run Code Online (Sandbox Code Playgroud) 之前我曾问过as在C#中使用是否安全(即不会爆炸):在C#中使用"as"是一种安全的铸造方式吗?
我喜欢这个答案并最终使用了基于它的东西:
Foo x = y as Foo;
if (x != null)
{
...
}
Run Code Online (Sandbox Code Playgroud)
但是现在我将我的C#代码转换为C++/CLI(由于依赖问题......)所以问题是......
我正在寻找相当于"as"的C++/CLI,这是安全的,如果不是正确的类型,也不会在运行时爆炸.任何人都可以建议一个满足我需求的演员吗?(如果可以,请提供一个例子)
谢谢!