-1

我已经使用 MVC4 和 C# 创建了一个 API。我的一些命令有问题。我不断收到此错误:“'API.Controllers.EmployeesController.GetDepartment(int)' 的最佳重载匹配有一些无效参数。” 下面是我的代码。我在调用类似函数的三个不同行上收到错误。发送给函数的值有可能为空。

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

您问题的这一部分解释了一切:

发送给函数的值有可能为空。

您的问题是您将一个可为空的 int 传递给一个需要一个 int 的方法。将方法的签名更改为:

public string GetDepartment(int? departmentId)

或将您对 GetDepartment 的呼叫更改为:

string department = GetDepartment(departmentId.Value);

当然,无论您选择哪个,请确保在尝试引用它之前检查参数是否为空值!

于 2012-12-18T22:53:29.810 回答
0

你可能在传递 a int?orNullable<int>吗?试试position.college_ID.Value

于 2012-12-18T22:35:31.227 回答
0

dept_ID(+1 到斯科特评论)的类型是什么?

通过查看您的代码,我可以说dept_ID肯定是引用类型(所以绝对不是intwhich 是值类型)。实际上,您正在检查代码以查看是否dept_idnull(但是如果dept_ID是真的,int它无论如何都不会编译,因为不可能检查值类型null)。

所以dept_ID要么是一个有意义的Nullable<int>(语法糖: )......而且在这种情况下Max答案会工作得很好......或者是另一个引用类型(例如一个类),在这种情况下我们将需要类型声明看看如何解决这个问题。int?dept_id

无论如何,这dept_ID肯定不是一个 int,所以你得到错误“无效参数”是有道理的,因为GetDepartment除了一个int参数,但你给它的东西不是一个 int。

GetCollege同样,您调用and时也会出现错误GetBuilding,两者都int期望值类型作为参数,但获取的引用类型不是int.

希望有帮助!

于 2012-12-18T22:49:14.620 回答