如何访问在另一个类的静态对象中创建的列表?

时间:2017-12-05 10:43:58

标签: c#

我想要做的是在我的应用程序启动时将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构造函数中创建对象。这似乎也没有用,所以我希望有人可以指出我正确的方向或至少提出一些建议。

4 个答案:

答案 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