C# 方法返回一个错误";并非所有代码路径都返回值,请协助

C# 方法返回一个错误";并非所有代码路径都返回值,请协助,c#,unity3d,C#,Unity3d,使用unity创建过程映射时,我遇到了错误“Cs0161:并非所有代码路径都返回值”,我对编码还是相当陌生,可能犯了一些错误 我试过谷歌,但答案对我来说都没有意义 然而 MapData GenerateMapData() { float[,]noiseMap=Noise.GenerateNoiseMap(mapChunkSize,mapChunkSize,种子,noiseScale,八度音阶,空隙率,持久性,偏移量); Color[]colormap=新颜色[mapChunkSize*mapCh

使用
unity
创建过程映射时,我遇到了错误“Cs0161:并非所有代码路径都返回值”,我对编码还是相当陌生,可能犯了一些错误

我试过谷歌,但答案对我来说都没有意义 然而

MapData GenerateMapData()
{
float[,]noiseMap=Noise.GenerateNoiseMap(mapChunkSize,mapChunkSize,种子,noiseScale,八度音阶,空隙率,持久性,偏移量);
Color[]colormap=新颜色[mapChunkSize*mapChunkSize];
对于(int y=0;y如果(currentHeight您收到该错误的原因是因为您的return语句在for循环内。更具体地说,两个循环都不执行(例如mapChunkSize==0。那么0不小于0,并且程序不输入for循环)所以,要么将返回移到循环外,要么在循环外添加另一个返回

MapData GenerateMapData()
    {
        float[,] noiseMap = Noise.GenerateNoiseMap(mapChunkSize, mapChunkSize, seed, noiseScale, octaves, lacunarity, persistance, offset);

        Color[] colourMap = new Color[mapChunkSize * mapChunkSize];

        for (int y = 0; y < mapChunkSize; y++)
        {
            for (int x = 0; x < mapChunkSize; x++)
            {
                float currentHeight = noiseMap[x, y];
                for (int i = 0; i < regions.Length; i++)
                {
                    if (currentHeight <= regions[i].height)
                    {
                        colourMap[y * mapChunkSize + x] = regions[i].colour;
                        break;
                    }
                }
            }

            /*return new MapData(noiseMap, colourMap); //uncommenting this might still leave you with the functionality you want */
        }

        return new MapData(noiseMap, colourMap);

}
MapData GenerateMapData()
{
float[,]noiseMap=Noise.GenerateNoiseMap(mapChunkSize,mapChunkSize,种子,noiseScale,八度音阶,空隙率,持久性,偏移量);
Color[]colormap=新颜色[mapChunkSize*mapChunkSize];
对于(int y=0;y如果(currentHeight在for循环之后,您还应该返回一个值。请参阅下面的代码和方法底部的注释:

MapData GenerateMapData()
{
    float[,] noiseMap = Noise.GenerateNoiseMap(mapChunkSize, mapChunkSize, seed, noiseScale, octaves, lacunarity, persistance, offset);

    Color[] colourMap = new Color[mapChunkSize * mapChunkSize];

    for (int y = 0; y < mapChunkSize; y++)
    {
        for (int x = 0; x < mapChunkSize; x++)
        {
            float currentHeight = noiseMap[x, y];
            for (int i = 0; i < regions.Length; i++)
            {
                if (currentHeight <= regions[i].height)
                {
                    colourMap[y * mapChunkSize + x] = regions[i].colour;
                    break;
                }
            }
        }

        return new MapData(noiseMap, colourMap);
    }

    // You should also return something here
}
MapData GenerateMapData()
{
float[,]noiseMap=Noise.GenerateNoiseMap(mapChunkSize,mapChunkSize,种子,noiseScale,八度音阶,空隙率,持久性,偏移量);
Color[]colormap=新颜色[mapChunkSize*mapChunkSize];
对于(int y=0;y如果(currentHeight没有返回第一个循环之外的任何内容,请尝试评估循环内的值,然后从循环外返回

for (int y = 0; y < mapChunkSize; y++)
        {
            for (int x = 0; x < mapChunkSize; x++)
            {
                float currentHeight = noiseMap[x, y];
                for (int i = 0; i < regions.Length; i++)
                {
                    if (currentHeight <= regions[i].height)
                    {
                        colourMap[y * mapChunkSize + x] = regions[i].colour;
                        break;
                    }
                }
            }

            return new MapData(noiseMap, colourMap);
        }

       add return statement here
for(int y=0;y如果(currentHeight该错误实际上已经告诉您出了什么问题。请看最后一行,如果
mapChunkSize
为0怎么办?在这种情况下,您不会返回任何内容。我怀疑您只是想让
return
语句位于顶级循环之外。如果循环只执行一次,则会很奇怪。方法可能重复如果是void以外的类型,则必须返回一些内容,请告诉我是否有用。
for (int y = 0; y < mapChunkSize; y++)
        {
            for (int x = 0; x < mapChunkSize; x++)
            {
                float currentHeight = noiseMap[x, y];
                for (int i = 0; i < regions.Length; i++)
                {
                    if (currentHeight <= regions[i].height)
                    {
                        colourMap[y * mapChunkSize + x] = regions[i].colour;
                        break;
                    }
                }
            }

            return new MapData(noiseMap, colourMap);
        }

       add return statement here