在Static方法中访问非静态DataSet

时间:2015-03-06 07:47:04

标签: c#

我是C#的新手,遇到了问题。我想做以下事情:

我想要从静态方法访问DataSet state。但是,使用(SpecExplorer)的插件不允许我将DataSet的实例声明为static。例如:

// This gives a long error from SpecExplorer
static State state = new State();

// This gives no error however I am not able to use `state` in any of the static functions.
State state = new State();

我试图访问state的函数必须看起来像这样,因为SpecExplorer需要这样做:

[Rule]
static void create(int param) {
   // ACCESS STATE
}

我也尝试了以下建议的解决方案:

Accessing non static variables in static methods 但是在尝试时会得到完全相同的错误。

我得到的错误说明如下:

  

Syste.Data.DataSet.set_Namespace(System.String)中的unavaliable成员:   System.Data.Common.ADP.IsEmpty(System.String)(可能是因为类型替换不完整)。

我的问题是: 允许我在静态方法中访问state的解决方法是什么?

3 个答案:

答案 0 :(得分:0)

创建static instance持有人类DataSet

 class classA {
  //...
  public DataSet state;
  //...
 }

你可以:

static ClassA a=new ClassA():
[Rule]
static void create(int param) {
   //...
   a.state=//do something with it;
   //...
}

答案 1 :(得分:0)

最好的方法是传递state作为附加参数:

[Rule]
static void create(State state, int param) {
   // ACCESS STATE
}

从可以访问实例成员的方法中调用它。

State s = new State();
State.create(s, 0);

或者来自State实例:

create(this, 0);

答案 2 :(得分:0)

看起来问题在于DataSet要求在探索期间调用非托管函数。建议仅在表示状态时使用Microsoft.Modeling中的类型。