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# では astringではなく acharです。を使用する必要があります'M'

postcode.postcode_finder.distanceあなたが得たエラーは、基本的に「あなたが与えている型のパラメータを取る関数が見つかりません」と言っています。

Argument 5: cannot convert from 'string' to 'char'問題をさらに絞り込んだことを示す 2 番目のコンパイラ エラーを受け取るはずです。

于 2013-01-09T13:19:08.767 に答える
4

エラーはそれをすべて言います:

'postcode.postcode_finder.distance(double、double、double、double、char)'に最適なオーバーロードされたメソッドの一致には、いくつかの無効な引数があります

つまり、コンパイラは、指定さpostcode.postcode_finder.distanceれた署名で名前が付けられたメソッドを見つけることができません。

C#では、charリテラルは1文字を一重引用符で囲むことによって表現されます。リテラルは、string文字を二重引用符で囲むことによって表現されます。コード内でに変更"M"する'M'と、このエラーは解消されます。

于 2013-01-09T13:21:51.357 に答える
2

メソッドはcharパラメータとしてを取ります。
文字列(でマークされている")を渡すと、文字は。で宣言され'ます。
したがって、次のようになります。distance(32.9697, -96.80322, 29.46786, -98.53506, 'M');

于 2013-01-09T13:21:12.810 に答える
2

最後のパラメーターとして「M」を使用する必要があります。これは、C# で char 定数を指定する方法です。

于 2013-01-09T13:20:15.327 に答える
2

"M"ではStringなく、charです。(二重引用符のため)。

そのため、コンパイラは、char を期待する関数 distance への呼び出しを受け入れません。

入れ'M'て、それは大丈夫なはずです。(char一重引用符の間の ar )

于 2013-01-09T13:20:28.423 に答える