- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个存储库类和一个服务类,如下所示:
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/
我想成为 Spark 纱客户(link)。是否需要安装hadoop?还是只安装 yarn 可以吗? (by this link) 最佳答案 No Spark不需要Hadoop即可运行。 Apache
我是一名优秀的程序员,十分优秀!