相关疑难解决方法(0)

为什么我收到警告必须初始化不可为空的字段(当我确定正在初始化它时)?

我有:

public abstract class Craft
{
    public Craft()
    {
        CurrentQuadrant = new Point(0, 0);
    }

    private Point _currentQuadrant;
    public Point CurrentQuadrant
    {
        get => _currentQuadrant;
        set
        {
            _currentQuadrant = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

(点是一个简单的 xy 对)。

为什么会给我这样的警告Non-nullable field '_currentQuadrant' must contain a non-null value when exiting the constructor?赋值是否不能确保它不为空?

c# visual-studio

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

为什么我收到警告 CS8602?

我看到了很多有关此错误的问题,但所有/大多数都包含复杂的代码或类型。

我使用这一行很多年了,提示方法名称时出错:

string currentMethod = System.Reflection.MethodBase.GetCurrentMethod().Name;
Run Code Online (Sandbox Code Playgroud)

但现在我得到这个错误:

警告 CS8602:取消引用可能为空的引用。

我应该更改什么/是否有另一种方法可以获取当前方法的名称而不出现此错误?

谢谢

c# null

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

EF Core 模型的 .NET 6 可空属性警告

我正在使用 EF Core,并且我有这个模型:

public class Article
{
    public int Id { get; set; }
    public User Author { get; set; } // <- CS8618
    public int AuthorId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

正如上面的代码注释中所指出的,我收到一个恼人的可为空警告。我正在使用 Fluent API 来注释我的模型,显然 Author 不可为空,因为 AuthorId 不可为空。

我觉得使用User? Author相反 来使警告消失是不正确的,因为该属性显然不可为空,这将是一个谎言,并且也向使用我的模型的人暗示它可以为空。

处理这种情况的正确方法是什么?抑制警告?

c# entity-framework-core .net-6.0

7
推荐指数
3
解决办法
5337
查看次数

带有支持字段的必需 init 属性给出 null 警告 C# 11

具有设置支持字段的必需 init 属性仍然会给出空警告。

下面的代码给出了一个警告:

警告 CS8618 退出构造函数时,不可空字段“_name”必须包含非空值。考虑将该字段声明为可为空。

public class TestRequiredInit
{
    private readonly string _name;

    public required string Name
    {
        get => _name;
        init => _name = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

字段可为空警告

我没有看到一种TestRequiredInit在不_name设置为非空值的情况下创建的方法。 尝试创建都会给出警告或错误的类的不同方法

这是 MSBuild / VS 中的错误,还是我遗漏了什么?

更新以防止人们推荐使用汽车属性

为了提出问题,我对上面的代码进行了一些简化。我希望能够向属性初始值设定项添加初始化逻辑。

public class TestRequiredInit
{
    private readonly string _name;

    public required string Name
    {
        get => _name;
        init
        {
            if (value.Length > 50)
            {
                throw new ArgumentException();
            }

            _name = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# c#-11.0

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

创建具有许多不可为空属性的 .NET6 类的最佳方法是什么?

我尝试创建具有一定数量的非空属性(> 7)的类。

如果我这样做:

public class Meeting
{

    public Name Name { get; set; }
    public Person ResponsiblePerson { get; set; }
    public Description Description {get; set; }
    public Category Category { get; set; }
    public Type Type { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public List<Person> Attendees { get; set; }


    public Meeting()
    {
        Attendees = new List<Person>();
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到这样的警告: “退出构造函数时,不可为空的属性 '...' 必须包含非空值。请考虑将该属性声明为可空。”

我想到了一个变体列表:

  • 默认值删除了这个警告,但我认为,它只会添加无用的值,将来无论如何都需要更改。

  • 如果我初始化构造函数中的所有属性,此警告就会消失,但构造函数将具有 >7 个参数,这将是一场噩梦。 …

.net c#

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