相关疑难解决方法(0)

如何更改C#中的默认值(T)?

我想改变默认(T)对某些类的行为.因此,我想返回一个null对象,而不是为我的引用类型返回null.

有一些像

kids.Clear();
var kid = kids.Where(k => k.Age < 10).SingleOrDefault(); 

if (kid is NullKid)
{
  Console.Out.WriteLine("Jippeie");
}
Run Code Online (Sandbox Code Playgroud)

任何人都知道这是否可能?

c# linq default nullable

14
推荐指数
3
解决办法
4435
查看次数

为什么编译器会抛出错误 CS0165:使用未分配的局部变量?

我把代码放在下面,也上传到了一个在线的c#编译器: jdoodle.com/a/1jww 代码可以在线编译和运行,但是在我本地的visual studio中无法编译。

我在用:

Visual Studio 2017 15.9.13,

控制台应用程序,.Net Framework 4.7.2

语言版本 c# 7.3

Microsoft (R) Visual C# 编译器版本 2.10.0.0 (b9fb1610)

下面是代码:

class Program
{
    static void Main()
    {
        Dictionary<string,int> myDict = new Dictionary<string,int>();
        myDict.Add("hello", 1);

        if (myDict?.TryGetValue("hello", out var value) == true)
        {               
            Console.WriteLine("Hello" + value.ToString());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

期望在 Console.Output 中看到 Hello1 因为如果条件为真,Null-Conditional 检查必须返回一个非空值,并且键存在于字典中并且从 TryGetValue 方法返回时必须已经分配了该值.

因为根据文档:

被调用的方法需要在方法返回之前分配一个值。


更新:这是https://github.com/dotnet/roslyn/issues/32572 中的一个悬而未决的问题,
如果对编译器的要求包括不发出误报,我认为这是一个真正的问题/错误。我的论点:
每当 CPU 执行到 if 括号代码块内的点时,该值必须从 TryGetValue 调用返回并且不是“未分配的局部变量”。如果编译器在解释空条件运算符时无法期待赋值状态,则更简单的解决方案是将诸如“无法确定赋值状态”之类的内容作为警告而不是错误。

c# compiler-errors

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

标签 统计

c# ×2

compiler-errors ×1

default ×1

linq ×1

nullable ×1