传递null替代重载

时间:2012-03-21 22:35:44

标签: c# asp.net visual-studio-2010 c#-4.0

有没有办法将空值传递给C#中的参数?

原因是我必须将一些sql参数作为空值(在存储过程中设置了默认值)传递给我的SQL数据库中的某些存储过程。我的代码是通过数据访问类接收数据。因此,我必须在数据访问类中进行大量的方法重载,以支持事件/方法背后的代码。实施例;

public static DataTable GetUsers(int companyId, int departmentId){
   //Return a DataTable of users in the given company & dept
}
public static DataTable GetUsers(int companyId){
   //Return a DataTable of users in the given company
}

如果我可以将null值传递给departmentId,我可以避免这种重载并让sp处理它。

干杯!!

4 个答案:

答案 0 :(得分:2)

您可以使用可选参数,但是您需要使用int?Nullable<int>代替int):

public static DataTable GetUsers(int companyId, int? departmentId = null){
   //Return a DataTable of users in the given company & dept
}

答案 1 :(得分:1)

您可以使用Optional arguments,如下所示:

public static DataTable GetUsers(int companyId, int? departmentId=null){
   //Return a DataTable of users in the given company & dept
}

答案 2 :(得分:1)

int? myInt = null; //Nullable
int myInt; //Not nullable

在第一行myInt中定义为NullableNullable of int。它们是System.Nullable结构的实例。 可以为空的类型可以表示其基础值类型的正常值范围,另外还有一个空值。

通过如上定义方法参数将允许传递空值。实施例;

string check1 = Method1(null); //"This deptId is NULL"
string check2 = Method1(1);  //"This deptId is NOT NULL"

private string Method1(int? deptId)
{
    return deptId != null ? "This deptId is NOT NULL" : "This deptId is NULL";
}

希望这有帮助。

答案 3 :(得分:0)

您可以为departmentId使用Nullable int。

public static DataTable GetUsers(int companyId, int? departmentId)

public static DataTable GetUsers(int companyId, Nullable<int> departmentId)