小编dev*_*per的帖子

检查C#中的对象是否为null

我想阻止对象的进一步处理,如果它是null.

在下面的代码中,我通过以下任一方法检查对象是否为null:

if (!data.Equals(null))
Run Code Online (Sandbox Code Playgroud)

if (data != null)
Run Code Online (Sandbox Code Playgroud)

不过,我收到NullReferenceExceptiondataList.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)?

c# null nullreferenceexception

196
推荐指数
11
解决办法
78万
查看次数

XPath - 选择等于值的元素

在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)

xpath

95
推荐指数
2
解决办法
17万
查看次数

在c中实现时间延迟

我不确切地知道如何搜索这个...所以我没有任何运气找到任何东西..:S

我需要在C中实现延时.

例如,我想做一些事情,然后等一分钟,然后继续做一些事情.

这有意义吗?谁能帮我吗?

c time sleep timedelay delay

29
推荐指数
4
解决办法
13万
查看次数

在C#中使用"as"是一种安全的铸造方式吗?

我想知道在下面的代码中使用关键字"as"是否是一种安全的方式(即不会爆炸)在C#中进行转换:

public void abc(ref Object dataSource)
{
    DataTable table = dataSource as DataTable;
}
Run Code Online (Sandbox Code Playgroud)

有更安全的铸造方式吗?

c# casting

24
推荐指数
3
解决办法
2万
查看次数

在XPath中使用not()

我想如何正确使用XPath中的"not".我似乎无法让它与属性一起工作.

假设我有这个表达式://*[@name = 'Bob']它是有效的,并将返回名称属性等于'Bob'的所有节点.

现在,如果我想要所有名称属性不等于'Bob'的节点,我需要使用XPath,例如://*[@name not(='Bob')]但这是无效的.

我已经尝试了多种组合,其中not()被放置在不同的顺序中,但我似乎无法使其工作.有人可以告诉我如何正确使用not()吗?

此外,使用元素而不是属性时订单是否会更改?如://name[text() = 'Bob']

谢谢!:)

xpath

22
推荐指数
3
解决办法
4万
查看次数

在使用C++/CLI代码传递参数时,^符号是否替换了C#的"ref"?

在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++中像(指针)一样使用.它的工作原理是否类似?

谢谢!

c# c++-cli

19
推荐指数
1
解决办法
2万
查看次数

运行时致命错误 - 可能是CLR错误

我想了解一下我收到的错误:

托管调试助手'FatalExecutionEngineError'检测到'C:\ app.exe'中存在问题.附加信息:运行时遇到致命错误...此错误可能是CLR中的错误或用户代码的不安全或不可验证部分.此错误的常见来源包括COM-interop或PInvoke的用户封送错误,这可能会破坏堆栈."

我不仅要了解错误本身,还要了解CLR可能发挥作用的方式/方式,而且我从未真正听说过COM-intercop或PInvoke ......所以对这些内容的一些见解也会有所帮助.

此外,真正奇怪的部分是,如果我继续通过断点并且不进入或超过,我没有看到错误.但是,如果我逐行执行,则会弹出错误!任何人都可以解释为什么我只是在走过时看到它?

不确定其他哪些信息会有用..请告诉我(当然很好!)我可以添加的内容.

先感谢您!:)

clr visual-studio

10
推荐指数
2
解决办法
2万
查看次数

使用XSL用新节点替换XML节点

我需要一个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来复制结构的前半部分,然后只复制下半部分(为了在两半之间填充我的新节点)但是看起来子串仅起作用识别节点标签之间的文本,而不是像我想要的那样识别标签本身.:( :(

还有其他方法吗?

xml xslt xpath

9
推荐指数
2
解决办法
3万
查看次数

命名空间错误 - 如何修复?

我是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)

namespaces visual-studio-2010

9
推荐指数
1
解决办法
6824
查看次数

C++/CLI中的安全转换 - 相当于C#的"as"?

之前我曾问过as在C#中使用是否安全(即不会爆炸):在C#中使用"as"是一种安全的铸造方式吗?

我喜欢这个答案并最终使用了基于它的东西:

Foo x = y as Foo;
if (x != null)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是现在我将我的C#代码转换为C++/CLI(由于依赖问题......)所以问题是......

我正在寻找相当于"as"的C++/CLI,这是安全的,如果不是正确的类型,也不会在运行时爆炸.任何人都可以建议一个满足我需求的演员吗?(如果可以,请提供一个例子)

谢谢!

c# casting c++-cli

8
推荐指数
1
解决办法
3991
查看次数