-1

C# で MVC4 を使用して API を作成しました。コマンドのいくつかに問題があります。「'API.Controllers.EmployeesController.GetDepartment(int)' のオーバーロードされた最適な一致には、無効な引数があります。」というエラーが表示され続けます。以下は私のコードです。同様の関数を呼び出す 3 つの異なる行でエラーが発生します。関数に送信される値は、null になる可能性があります。

public List<Models.Position> GetPositions(int EmployeeID)
    {
        var positions = from position in _context.tbl_positions
                        where position.people_ID == EmployeeID
                        select new Models.Position
                        {
                            PositionID = position.id
                            ,Department = position.dept_ID == null ? string.Empty : GetDepartment(position.dept_ID)
                            ,JobTitle = position.title
                            ,Building = position.location_ID == null ? string.Empty : GetBuilding(position.location_ID)
                            ,Room = position.room
                            ,Phone = position.public3 == null ? string.Empty : "000-111-" + position.public3
                            ,Fax = position.fax3 == null ? string.Empty : "000-111-" + position.fax3
                            ,College = position.college_ID == null ? string.Empty ? GetCollege(position.college_ID)
                        };

        return positions.ToList();
    }

    public string GetDepartment(int DeptId)
    {
        var department = (from departments in _context.tbl_departments
                          where departments.ID == DeptId
                          select departments.dept).SingleOrDefault();

        return department;
    }

    public string GetBuilding(int BID)
    {
        var building = (from buildings in _context.tbl_locations
                          where buildings.id == BID
                          select buildings.Name).FirstOrDefault();

        return building;
    }

    public string GetCollege(int CID)
    {
        var college = (from colleges in _context.tbl_colleges
                          where colleges.id == CID
                          select colleges.college).SingleOrDefault();

        return college;
    }
4

3 に答える 3

1

あなたの質問のこの部分はそれをすべて説明しています:

関数に送信される値は、null になる可能性があります。

あなたの問題は、int を期待するメソッドに nullable int を渡していることです。メソッドのシグネチャを次のように変更します。

public string GetDepartment(int? departmentId)

または GetDepartment への呼び出しを次のように変更します。

string department = GetDepartment(departmentId.Value);

もちろん、どちらを選択しても、引数を参照する前に、null 値の引数を確認してください。

于 2012-12-18T22:53:29.810 に答える
0

dept_ID(+1 to Scott コメント)のタイプは何ですか?

あなたのコードを見るだけで言えることdept_IDは、それは確かに参照型であるということです (したがって、値型であるということは間違いありませんint)。実際、コードでチェックを行って、 であるかどうかを確認しています(ただし、本当に であった場合はdept_id、に対して値の型をチェックすることはできないため、とにかくコンパイルされません)。nulldept_IDintnull

dept_ID意味のあるNullable<int>(syntax sugar: int?) であり、その場合、Max の回答は問題なく機能します ... または別dept_idの参照型 (たとえば、クラス) であり、その場合、型が必要になります。これを回避する方法を確認するための宣言。

いずれにせよ、これは確かに int ではないので、引数を除いてdept_ID「無効な引数」というエラーが発生するのは理にかなっていますが、int ではない何かを与えています。GetDepartmentint

同様に、GetCollegeandへの呼び出しでもエラーが発生しますGetBuilding。どちらもint引数として値型を想定していますが、 ではない参照型を取得していますint

それが役立つことを願っています!

于 2012-12-18T22:49:14.620 に答える
0

おそらくまたはを渡していますint?Nullable<int>?試してみてくださいposition.college_ID.Value

于 2012-12-18T22:35:31.227 に答える