gpt4 book ai didi

c# - 字段初始值设定项不能引用非静态字段、方法或属性?

转载 作者:可可西里 更新时间:2023-11-01 03:08:30 24 4
gpt4 key购买 nike

我有一个存储库类和一个服务类,如下所示:

public class DinnerRepository
{
DinnerDataContext db = new DinnerDataContext();

public Dinner GetDinner(int id)
{
return db.Dinners.SingleOrDefault(d => d.DinnerID == id);
}

// Others Code
}



public class Service
{
DinnerRepository repo = new DinnerRepository();
Dinner dinner = repo.GetDinner(5);

// Other Code
}

这会引发错误:

A field initializer cannot reference the non-static field, method, or property.

尽管我已经创建了 DinnerRepository 类以在服务类中公开其方法 GetDinner()。这适用于以下代码。有没有其他选择或者它是一种标准做法?我不能在这里使用静态方法..

public class Service
{

public Service()
{
DinnerRepository repo = new DinnerRepository();
Dinner dinner = repo.GetDinner(5);
}

}

最佳答案

我个人只是在构造函数中初始化字段:

public class Service
{
private readonly DinnerRepository repo;
private readonly Dinner dinner;

public Service()
{
repo = new DinnerRepository();
dinner = repo.GetDinner(5);
}
}

请注意,这与您在问题底部显示的代码不同,因为它只是声明本地 变量。如果您只想要局部变量,那很好 - 但如果您需要实例变量,那么使用上面的代码。

基本上,字段初始值设定项的功能有限。来自 C# 4 规范的第 10.5.5.2 节:

A variable initializer for an instance field cannot reference the instance being created. Thus it is a compile-time error to reference this in a variable initializer, because it is a compile-time error for a variable initializer to reference any instance member through a simple-name.

(“因此”和“因此”在我看来是错误的方式 - 通过简单名称引用成员是非法的因为它引用了this -我会通知 Mads - 但那基本上是相关部分。)

关于c# - 字段初始值设定项不能引用非静态字段、方法或属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7400677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com