C# 消除访问多维数组元素时使用临时变量

C# 消除访问多维数组元素时使用临时变量,c#,arrays,multidimensional-array,point,indices,C#,Arrays,Multidimensional Array,Point,Indices,有没有一种方法可以将数组对象的字段的坐标放在一行中 我有一个数组:Tile[,]Tiles。每当我需要更改其中一个Tile并且事先知道索引时,我就这样做:tiles[1,2]=newtile(args) 但当我必须计算它们时,它看起来是这样的: Point p = GetTargetTileIndices(args); Tiles[p.X, p.Y].someField = 127; 每次在temp变量中存储tile的索引都会让人困惑,有时甚至很难读取。有没有一种方法可以将索引获取为点或其他内

有没有一种方法可以将数组对象的字段的坐标放在一行中

我有一个数组:
Tile[,]Tiles
。每当我需要更改其中一个Tile并且事先知道索引时,我就这样做:
tiles[1,2]=newtile(args)

但当我必须计算它们时,它看起来是这样的:

Point p = GetTargetTileIndices(args);
Tiles[p.X, p.Y].someField = 127;
每次在temp变量中存储tile的索引都会让人困惑,有时甚至很难读取。有没有一种方法可以将索引获取为
或其他内容,并在一行中使用目标数组元素


UPD:现在我很清楚,做

var tile = GetTile(point);
tile.field = value;
…不会更改阵列中的磁贴,但

GetTile(point).field = value;

…是的

创建一个
getTargetFile
helper方法。。。就像您的
getTargetId
一样,它返回实际的
磁贴

而不是
创建一个
getTargetId
辅助方法。。。就像您的
getTargetItemIndicates
一样,它返回实际的
磁贴,而不是
,只需编写您自己的方法:

public static class Extensions
{
    public static T GetValue<T>(this T[,] array, Point point)
    {
        return array[point.X, point.Y];
    }

    public static void SetValue<T>(this T[,] array, Point point, T value)
    {
        array[point.X, point.Y] = value;
    }
}

只需编写自己的方法:

public static class Extensions
{
    public static T GetValue<T>(this T[,] array, Point point)
    {
        return array[point.X, point.Y];
    }

    public static void SetValue<T>(this T[,] array, Point point, T value)
    {
        array[point.X, point.Y] = value;
    }
}

@DonRoby,它似乎是C#。有什么原因你不能使用
字典
字典
?@MichaelPerrenoud每个地图大约有2000万个平铺对象,我不确定任何类型的字典都比数组快,尽管我还没有检查。@user1306322,它不是更快。你的问题是关于可读性的。@MichaelPerrenoud我想当谈论基于磁贴的游戏时,必须做出一些牺牲:)@DonRoby,它看起来像是C#。有什么原因不能使用
字典或
字典吗?@MichaelPerrenoud每个地图大约有2000万个磁贴对象,我不确定任何类型的字典都比数组快,尽管我还没有检查。@user1306322,它并不是更快。你的问题是关于可读性的。@MichaelPerrenoud我想当谈论一个基于平铺的游戏时,必须做出一些牺牲:)我已经有了一个
GetTile(Point)
GetTile(int,int)
,它们完全按照它们的名字做,但我试图做的是在运行时设置一个tile的一些值计算地址,我不知道如何创建一个
SetTilesFieldValue(Point,Field,value)
方法。字段是可变的还是静态的?我假设这是一个你在设计时不知道的领域。我不确定你想解决什么问题。。。如果您只设置一个字段,请执行GetTile(args);否则,如果您正在使用tile执行多项操作,请调用GetTile并将结果存储在一个可以参与的局部变量中。这就是局部变量的作用:)我确信当我执行
GetTile(args)时,Field=Value它只会更改磁贴的本地副本,但一切正常,因为在本例中,我根本不会将磁贴分配给本地变量。问题是我通常将分片存储在本地变量中,在更改后,我必须显式地将其放回数组。我已经有了一个
GetTile(Point)
GetTile(int,int)
,它们完全按照它们被调用的方式工作,但我试图做的是在运行时设置一个tile的一些值计算地址,我不知道如何创建一个
SetTilesFieldValue(Point,Field,value)
方法。字段是可变的还是静态的?我假设这是一个你在设计时不知道的领域。我不确定你想解决什么问题。。。如果您只设置一个字段,请执行GetTile(args);否则,如果您正在使用tile执行多项操作,请调用GetTile并将结果存储在一个可以参与的局部变量中。这就是局部变量的作用:)我确信当我执行
GetTile(args)时,Field=Value它只会更改磁贴的本地副本,但一切正常,因为在本例中,我根本不会将磁贴分配给本地变量。问题是我通常将分片存储在本地变量中,在更改后,我必须显式地将其放回数组。