我有这个方法返回一个列表:
public List<int> GetCapabilitiesInfo()
{
List<int> sizeList = new List<int>();
int cellSize = m_tree.db.getCellSize();
int mapSize = m_tree.db.m_mapInfo.mapsize;
sizeList.Add(cellSize);
sizeList.Add(mapSize);
return sizeList;
}
上面返回的列表是我希望在另一个类中使用此方法的列表: 但它失败了,因为它无法访问statix上下文中的非静态字段。
public static void TileMapCapabilities(string title)
{
// This method call from another class fails because it can't access a non-static field in a static context
TilePicker.GetCapabilitiesInfo();
TileMapObject tmo = new TileMapObject()
{
Title = title,
Abstract = "Some clever text about this.",
SRS = "OSGEO:41001",
Profile = "local",
BoundingBox = new BoundingBox() { maxX = 10000000, maxY = 10000000, minX = -10000000, minY = -10000000 },
Origin = new Origin() { maxX = 123, maxY = 456, minX = -123, minY = -456 },
EBoundingBox = new EBoundingBox(),
MapSize = 256,
CellSize = 3
};
}
我尝试做的是将两个整数cellSize
和mapSize
添加到我想要返回的列表中,这样我就可以在其中选出两个值并将其插入到我的TileMapObject
。如果我将GetCapabilitiesInfo()
设为静态,那么我只会遇到与m_tree
相同的问题,依此类推。我确定我忽略了一些基本的东西吗?
答案 0 :(得分:2)
您的列表是非静态类的一部分,因此,您需要它声明的对象的实例。 你可以这样做:
public static void TileMapCapabilities(string title, TilePicker picker)
{
var list = picker.GetCapabilitiesInfo();
//do whatever you want to do with the list;
}
您也可以传递列表:
public static void TileMapCapabilities(string title, List<int> list)
{
//do whatever you want to do with the list;
}
请记住,您要调用的例程所在的类不是静态的,因此,您必须将其实例化以使用该例程。
答案 1 :(得分:0)
我假设您无法使GetCapabilitiesInfo
静态,因为它似乎使用m_tree
等实例成员。如果是这种情况,那么您需要拥有TilePicker
的实例才能调用GetCapabilitiesInfo
。因此,您需要在TileMapCapabilities
中创建一个:
public static void TileMapCapabilities(string title)
{
// This method call from another class fails because it can't access a non-static field in a static context
TilePicker tp = new TilePicker();
// initialize tp?
tp.GetCapabilitiesInfo();
或添加一个参数,以便传入一个参数:
public static void TileMapCapabilities(string title, TilePicker tp)
{
// This method call from another class fails because it can't access a non-static field in a static context
tp.GetCapabilitiesInfo();
如果这些都不是选项,那么你必须查看设计才能连接这两个类。由于您当前的代码对返回的列表没有任何作用,因此不清楚它们应该如何连接。
答案 2 :(得分:0)
您需要创建类TilePicker
的实例,因为您的方法GetCapabilitiesInfo
未标记为静态。
TilePicker t = new TilePicker();
t.GetCapabilitiesInfo();
但是,您也可以将方法标记为静态,从而不需要实例:
static void GetCapabilitiesInfo() {...}