Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System.NullReferenceException C#建议?_C#_Exception - Fatal编程技术网

System.NullReferenceException C#建议?

System.NullReferenceException C#建议?,c#,exception,C#,Exception,当我试图运行我的程序时,我遇到了一个异常。。在我看来,它运行得很好,但我似乎遗漏了一些东西 public Coord LatLonToUTMXY(double lat, double lon) { Coord co = new Coord(); co.zone = Math.Floor((lon + 180.0) / 6) + 1; //double zone = Math.Floor((lon + 180.0) / 6) + 1;

当我试图运行我的程序时,我遇到了一个异常。。在我看来,它运行得很好,但我似乎遗漏了一些东西

 public Coord LatLonToUTMXY(double lat, double lon)
    {
        Coord co = new Coord();
        co.zone = Math.Floor((lon + 180.0) / 6) + 1;

        //double zone = Math.Floor((lon + 180.0) / 6) + 1;

        MapLatLonToXY(DegToRad(lat), DegToRad(lon), UTMCentralMeridian(co.zone),       co.eastNorth);

        /* Adjust easting and northing for UTM system. */
        co.eastNorth[0] = co.eastNorth[0] * UTMScaleFactor + 500000.0;
        co.eastNorth[1] = co.eastNorth[1] * UTMScaleFactor;
        if (co.eastNorth[1] < 0.0)
            co.eastNorth[1] = co.eastNorth[1] + 10000000.0;


        return co;
    }
对于co来说,这是一个结构

 public struct Coord
    {
        public double zone;
        public double[] eastNorth;


    }
我错过了什么


谢谢

发生这种情况是因为函数中的
xy
数组(来自
Coord.eastNorth
)未初始化。我注意到Coord是一个结构而不是一个类。有什么特别的原因吗?如果Coord是一个类,这会起作用

public class Coord
{
    public double Zone {get; set;}
    public List<double> EastNorth {get; set;}

    public Coord()
    {
        EastNorth = new List<double>();
    }
}



public List<double> MapLatLonToXY(double phi, double lambda, double lambda0)
{
   var xy = new List<double>();

   //Exception for xy[0] ....!
    xy.Add(N * Math.Cos(phi) * l
        + (N / 6.0 * Math.Pow(Math.Cos(phi), 3.0) * l3coef * Math.Pow(l, 3.0))
        + (N / 120.0 * Math.Pow(Math.Cos(phi), 5.0) * l5coef * Math.Pow(l, 5.0))
        + (N / 5040.0 * Math.Pow(Math.Cos(phi), 7.0) * l7coef * Math.Pow(l, 7.0)));

    /* Calculate northing (y) */
    xy.Add(ArcLengthOfMeridian(phi)
        + (t / 2.0 * N * Math.Pow(Math.Cos(phi), 2.0) * Math.Pow(l, 2.0))
        + (t / 24.0 * N * Math.Pow(Math.Cos(phi), 4.0) * l4coef * Math.Pow(l, 4.0))
        + (t / 720.0 * N * Math.Pow(Math.Cos(phi), 6.0) * l6coef * Math.Pow(l, 6.0))
        + (t / 40320.0 * N * Math.Pow(Math.Cos(phi), 8.0) * l8coef * Math.Pow(l, 8.0)));

    return xy;

}

public Coord LatLonToUTMXY(double lat, double lon)
{
    Coord co = new Coord();
    co.zone = Math.Floor((lon + 180.0) / 6) + 1;

    //double zone = Math.Floor((lon + 180.0) / 6) + 1;

    co.EastNorth = MapLatLonToXY(DegToRad(lat), DegToRad(lon), UTMCentralMeridian(co.zone));

    /* Adjust easting and northing for UTM system. */
    co.EastNorth[0] = co.EastNorth[0] * UTMScaleFactor + 500000.0;
    co.EastNorth[1] = co.EastNorth[1] * UTMScaleFactor;
    if (co.EastNorth[1] < 0.0)
        co.EastNorth[1] = co.EastNorth[1] + 10000000.0;


    return co;
}
公共类协作
{
公共双区{get;set;}
公共列表东北偏东{get;set;}
公共合作
{
EastNorth=新列表();
}
}
公共列表映射(双phi、双λ、双λ0)
{
var xy=新列表();
//xy[0]的例外情况。。。。!
xy.相加(N*数学Cos(phi)*l
+(N/6.0*数学功率(数学功率因数,3.0)*l3coef*数学功率因数(l,3.0))
+(N/120.0*数学功率(数学功率因数,5.0)*l5coef*数学功率因数(l,5.0))
+(N/5040.0*数学功率(数学Cos(phi,7.0)*l7coef*数学功率(l,7.0));
/*计算北距(y)*/
xy.Add(弧长多夫梅里迪安(φ)
+(t/2.0*N*Math.Pow(Math.Cos(phi),2.0)*Math.Pow(l,2.0))
+(t/24.0*N*Math.Pow(Math.Cos(phi),4.0)*l4coef*Math.Pow(l,4.0))
+(t/720.0*N*Math.Pow(Math.Cos(phi,6.0)*l6coef*Math.Pow(l,6.0))
+(t/40320.0*N*Math.Pow(Math.Cos(phi,8.0)*l8coef*Math.Pow(l,8.0));
返回xy;
}
公共坐标LatLonToUTMXY(双lat,双lon)
{
合作公司=新合作公司();
co.zone=数学楼层((lon+180.0)/6)+1;
//双区=数学楼层((lon+180.0)/6)+1;
co.EastNorth=MapLatLonToXY(DegToRad(lat)、DegToRad(lon)、UTMCentralMeridian(co.zone));
/*调整UTM系统的东距和北距*/
co.EastNorth[0]=co.EastNorth[0]*UTMScaleFactor+500000.0;
co.EastNorth[1]=co.EastNorth[1]*UTMScaleFactor;
如果(co.EastNorth[1]<0.0)
co.EastNorth[1]=co.EastNorth[1]+10000000.0;
返回公司;
}

可能会有很多地方出了问题。您共享的代码不足以说明问题。例如,我们没有get和set of co.zone属性。最好是检查您的调用堆栈。此异常最有可能发生,因为
xy
为null。修复此问题,您将修复此问题。应用后,我得到一个新的更重要的是,你知道它为什么工作,为什么你的不工作吗?我相信我必须初始化数组,这样就可以从内存中访问它。换句话说,它没有任何有效的地址可以访问。是的,这基本上是正确的。你可以把它作为一个数组保存,然后放入
EastNorth=new double[2];
在构造函数中也是如此。如果在编译时知道数据结构的大小,那么数组肯定会更有效率,但在我所从事的项目中,这种情况很少出现。
public class Coord
{
    public double Zone {get; set;}
    public List<double> EastNorth {get; set;}

    public Coord()
    {
        EastNorth = new List<double>();
    }
}



public List<double> MapLatLonToXY(double phi, double lambda, double lambda0)
{
   var xy = new List<double>();

   //Exception for xy[0] ....!
    xy.Add(N * Math.Cos(phi) * l
        + (N / 6.0 * Math.Pow(Math.Cos(phi), 3.0) * l3coef * Math.Pow(l, 3.0))
        + (N / 120.0 * Math.Pow(Math.Cos(phi), 5.0) * l5coef * Math.Pow(l, 5.0))
        + (N / 5040.0 * Math.Pow(Math.Cos(phi), 7.0) * l7coef * Math.Pow(l, 7.0)));

    /* Calculate northing (y) */
    xy.Add(ArcLengthOfMeridian(phi)
        + (t / 2.0 * N * Math.Pow(Math.Cos(phi), 2.0) * Math.Pow(l, 2.0))
        + (t / 24.0 * N * Math.Pow(Math.Cos(phi), 4.0) * l4coef * Math.Pow(l, 4.0))
        + (t / 720.0 * N * Math.Pow(Math.Cos(phi), 6.0) * l6coef * Math.Pow(l, 6.0))
        + (t / 40320.0 * N * Math.Pow(Math.Cos(phi), 8.0) * l8coef * Math.Pow(l, 8.0)));

    return xy;

}

public Coord LatLonToUTMXY(double lat, double lon)
{
    Coord co = new Coord();
    co.zone = Math.Floor((lon + 180.0) / 6) + 1;

    //double zone = Math.Floor((lon + 180.0) / 6) + 1;

    co.EastNorth = MapLatLonToXY(DegToRad(lat), DegToRad(lon), UTMCentralMeridian(co.zone));

    /* Adjust easting and northing for UTM system. */
    co.EastNorth[0] = co.EastNorth[0] * UTMScaleFactor + 500000.0;
    co.EastNorth[1] = co.EastNorth[1] * UTMScaleFactor;
    if (co.EastNorth[1] < 0.0)
        co.EastNorth[1] = co.EastNorth[1] + 10000000.0;


    return co;
}