我想要做的是在我的应用程序启动时将counts
类中定义的对象App
中的列表定为静态:
这是对象:
public class Counts
{
public Counts()
{
public static List<CntQty> CardClicks2m;
}
}
在我的申请中,我声明了这个
我正在使用以下代码:
public partial class App : Application
{
public static Counts counts = new Counts();
public App()
{
}
}
现在我尝试将一些数据加载到列表中,但它给出了下面的错误。请注意,此函数位于另一个类中。
public void GetClickHistory()
{
App.counts.CardClicks2m = db2.Query<CntQty>(sql);
代码的最后一行给我一个错误说
使用实例引用无法访问counts.CardClicks2m; 用类型名称来限定它。
我尝试了几种不同的方法来完成这项工作。一种是删除静态并在app构造函数中创建对象。这似乎也没有用,所以我希望有人可以指出我正确的方向或至少提出一些建议。
答案 0 :(得分:1)
我猜变量的范围不对,你需要这样做
public class Counts
{
public static List<CntQty> CardClicks2m;
public Counts()
{
}
}
答案 1 :(得分:1)
错误非常自我解释,您无法使用实例变量访问静态属性。您需要做的就是使用typename。所以这个:
App.Counts.CardClicks2m
成为这个:
Counts.CardClicks2m
您可能需要指定Counts
类的完整命名空间:
Some.Namespace.Counts.CardClicks2m
答案 2 :(得分:0)
由于您的CardClicks2m
成员是静态的,因此无需拥有Counts
的任何实例 - 或者您的App
- 类。但是,该成员每个appdomain存在一次。说到这里是为了访问CardClicks2m
,您无需在Counts
内创建App
- 类的实例。
请改用:
class MyClass
{
void DoSometjing()
{
Counts.CardClicks2m = db2.Query<CntQty>(sql).ToList();
}
}
请注意Query
肯定不会返回List<CntQty>
,而是IQueryable<CntQty>
,这就是您之后应该致电ToList
的原因。
此外,您无法在方法或构造函数中声明成员。因此在class-body中声明它而不是构造函数:
public class Counts
{
public static List<CntQty> CardClicks2m;
public Counts() { /* any further initialzation */ } }
}
答案 3 :(得分:0)
您收到的错误是因为您尝试从实例对象
访问静态成员public void GetClickHistory()
{
App.counts.CardClicks2m = db2.Query<CntQty>(sql);
评论后编辑: 试试这个(从类中访问静态成员):
public void GetClickHistory()
{
Counts.CardClicks2m = db2.Query<CntQty>(sql);
由于CardClicks2m被声明为静态,因此必须从类范围访问它。如果Counts类没有任何其他代码,您可以声明
public static class Counts
创建计数实例
并不是必需的public static Counts counts = new Counts(); //this is not neccesary