相关疑难解决方法(0)

C#未初始化的变量是危险的吗?

我熟悉C#规范,第5.3节,它说在使用之前必须分配一个变量.

在C和非托管C++中,这是有道理的,因为堆栈没有被清除,并且用于指针的内存位置可能在任何地方(导致难以追踪错误).

但我的印象是运行时不允许真正的"未分配"值.特别是未初始化的引用类型将始终具有空值,而不是先前调用方法或随机值所遗留的值.

这是正确的,还是我错误地假设这些年来检查null是否足够?你可以在C#中使用非真实的变量,或者CLR是否会处理这个变量并且总是设置了一些值.

c# clr

36
推荐指数
3
解决办法
5081
查看次数

如何在C#中覆盖默认值(T)?

可能重复:
如何更改默认(T)在C#中返回的内容

print(default(int) == 0) //true
Run Code Online (Sandbox Code Playgroud)

同样,如果我有一个自定义对象,它的默认值将为null.

print(default(Foo) == null) //true
Run Code Online (Sandbox Code Playgroud)

我可以为自定义值default(Foo)而不是null吗?

例如,像这样:

public static override Foo default()
{
    return new Foo();
}
Run Code Online (Sandbox Code Playgroud)

这不会编译.谢谢..

.net c# overriding default

15
推荐指数
3
解决办法
1万
查看次数

TryGetValue 在空字典上

我尝试TryGetValue像往常一样在字典上使用,如下代码:

Response.Context.Skills[MAIN_SKILL].UserDefined.TryGetValue("action", out var actionObj)
Run Code Online (Sandbox Code Playgroud)

我的问题是字典本身可能为 null。我可以简单地使用“?”。在 UserDefined 之前,但随后我收到错误:

"cannot implicitly convert type 'bool?' to 'bool'"
Run Code Online (Sandbox Code Playgroud)

我处理这种情况的最佳方法是什么?UserDefined在使用 TryGetValue 之前是否必须检查是否为 null?因为如果我必须使用Response.Context.Skills[MAIN_SKILL].UserDefined两次,我的代码可能看起来有点混乱:

if (watsonResponse.Context.Skills[MAIN_SKILL].UserDefined != null && 
    watsonResponse.Context.Skills[MAIN_SKILL].UserDefined.TryGetValue("action", out var actionObj))
{
    var actionName = (string)actionObj;
}
Run Code Online (Sandbox Code Playgroud)

.net c# dictionary trygetvalue

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

标签 统计

c# ×3

.net ×2

clr ×1

default ×1

dictionary ×1

overriding ×1

trygetvalue ×1