📜  抱怨 - C# (1)

📅  最后修改于: 2023-12-03 15:25:51.721000             🧑  作者: Mango

抱怨 - C#

作为C#程序员,我们都会不断地遇到各种令人抓狂的问题和坑点。在这篇文章中,我将分享一些我遇到过的最令人抱怨的C#问题。

1. 编译错误的毫无意义的信息

C#编译器有时会给出一些非常晦涩难懂的错误信息。这些错误信息经常无法提供有关错误原因的任何线索,使我们感到完全束手无策。

例如,一个看似简单的语法错误可能会导致以下错误信息:

CS1513: } expected

这个错误信息并不能明确告诉我们哪个花括号位置有问题。

2. 特性的命名

特性是C#的一个强大功能,它可以用来给代码添加元数据,从而影响程序的行为。然而,开发人员总是在抱怨特性的一些奇怪的命名习惯。

例如,AspNetCore中的特性 [ProducesResponseType] 就表明了它的作用,但是没有人能理解表示"参数可为空"的特性 [AllowNull] 或表示"非空"的特性 [NotNull]

3. 未经初始化的引用类型

在C#中,每一个引用类型变量默认是null。但是,当我们没有意识到这点时,我们就会遇到NullPointerException。需要我们手动初始化每个引用类型变量,否则代码会出现非常易出错的情况。

例如,以下代码会引发NullPointerException错误:

string myString;
int length = myString.Length;
4. 接口和实现类的相互引用

C#中的接口经常用于定义类的结构和标准。然而,当接口和实现类彼此引用时,代码设计就非常容易出现循环依赖的问题,最终导致难以识别的代码行为。

例如,以下代码会展示循环依赖错误:

public interface IMyService
{
    void DoWork();
}

public class MyService : IMyService
{
    private readonly IMyRepository _repository;

    public MyService(IMyRepository repository)
    {
        _repository = repository;
    }

    public void DoWork()
    {
        _repository.Save();
    }
}

public interface IMyRepository
{
    void Save();
}

public class MyRepository : IMyRepository
{
    private readonly IMyService _service;

    public MyRepository(IMyService service)
    {
        _service = service;
    }

    public void Save()
    {
        _service.DoWork();
    }
}
5. 可空值类型

可空值类型允许我们在数值类型中使用null。虽然它很有用,但是语法非常神奇,并充满了令人困惑的用法。

例如,以下代码展示了可空值类型的使用方式:

int? myNumber = null;
if (myNumber.HasValue)
{
    int result = myNumber.Value;
}

总之,C#是一种非常强大的编程语言,但是也充满了令人苦恼的问题。当我们遇到问题时,希望能借助社区的力量,共同探讨解决方案。