0

我敢肯定这会很容易回答,并且可以归因于我对 C# 的“耳后湿”不止一点,但我在调用并将值放入函数之前遇到问题,然后在屏幕上写入响应.

该函数和调用在 PHP 中完美运行(我有更多经验),所以我认为问题更多在于在 C# 中使用正确的语法而不是其他任何东西。也许我还在尝试用我的 PHP 帽子写它?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace postcode
{
  public partial class postcode_finder : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
        //Example lat/long values entered below

        Response.Write(distance(32.9697, -96.80322, 29.46786, -98.53506, "M"));
    }

    public double distance(double lat1, double lon1, double lat2, double lon2, char unit) {

        double theta = lon1 - lon2;

        double dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta));

        dist = Math.Acos(dist);
        dist = rad2deg(dist);
        dist = dist * 60 * 1.1515;
        if (unit == 'K')
        {
            dist = dist * 1.609344;
        }
        else if (unit == 'N')
        {
            dist = dist * 0.8684;
        }

        return dist;

    }

    //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    //::  This function converts decimal degrees to radians             :::
    //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

    public double deg2rad(double deg)
    {
        return (deg * Math.PI / 180.0);
    }

    //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    //::  This function converts radians to decimal degrees             :::
    //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

    public double rad2deg(double rad)
    {
        return (rad / Math.PI * 180.0);
    }

  }
}

我得到的错误说'postcode.postcode_finder.distance(double,double,double,double,char)的最佳重载方法匹配'有一些无效的参数'。

我哪里错了?这里希望有更多专业知识的人可以在正确的方向上推动我。

谢谢

4

5 回答 5

10

"M"在 C# 中是 a string,而不是 a char; 你需要使用'M'.

你得到的错误基本上是说“我找不到一个调用postcode.postcode_finder.distance你给它的类型的参数的函数”。

您应该收到第二个编译器错误,说明Argument 5: cannot convert from 'string' to 'char'这将进一步缩小问题范围。

于 2013-01-09T13:19:08.767 回答
4

错误说明了一切:

'postcode.postcode_finder.distance(double, double, double, double, char)' 的最佳重载方法匹配有一些无效参数

换句话说,编译器找不到以postcode.postcode_finder.distance您提供的签名命名的方法。

在 C# 中,char文字通过将单个字符括在单引号中来表示。文字通过将字符括在双string引号中来表示。如果您在代码中更改"M"'M',此错误应该会消失。

于 2013-01-09T13:21:51.357 回答
2

您需要使用 'M' 作为最后一个参数——这是在 C# 中指定 char 常量的方式

于 2013-01-09T13:20:15.327 回答
2

"M"是一个String,不是一个char。(因为双引号)。

因此编译器不接受您对需要字符的函数距离的调用。

'M',应该没问题。(char单引号之间的 ar)

于 2013-01-09T13:20:28.423 回答
2

您的方法采用charas 参数。
您传递一个字符串(用 标记"),用 . 声明字符'
所以它应该是这样的:distance(32.9697, -96.80322, 29.46786, -98.53506, 'M');

于 2013-01-09T13:21:12.810 回答