c#4.0方法的可空输入参数 public IQueryable FindAllProfiles(字符串CountryFrom,字符串CountryLoc) { .... }

c#4.0方法的可空输入参数 public IQueryable FindAllProfiles(字符串CountryFrom,字符串CountryLoc) { .... },c#,C#,对于上述方法,是否可以使用可为空的输入参数CountryFrom和CountryLoc?当我调用此方法时,我必须传入2个值,否则可能会出现异常。有什么想法吗?字符串可以为空。您的意思是不可为空吗?string是一种引用类型,因此已经可以为空。您可以调用FindAllProfiles(null,null),代码至少可以正常编译。当然,您需要确保方法体适当地处理空参数,但这是辅助的 或者,如果您只是不允许在运行时使用任何空参数调用FindAllProfiles函数(是否?),只需在方法顶部使用gua

对于上述方法,是否可以使用可为空的输入参数CountryFrom和CountryLoc?当我调用此方法时,我必须传入2个值,否则可能会出现异常。有什么想法吗?

字符串可以为空。您的意思是不可为空吗?

string
是一种引用类型,因此已经可以为空。您可以调用
FindAllProfiles(null,null)
,代码至少可以正常编译。当然,您需要确保方法体适当地处理空参数,但这是辅助的

或者,如果您只是不允许在运行时使用任何空参数调用
FindAllProfiles
函数(是否?),只需在方法顶部使用guard语句即可:

public IQueryable<Profile> FindAllProfiles(string CountryFrom, string CountryLoc)
{
....
}

旁注:根据所有样式指南,函数参数名称应使用camelCase编写。

您的问题询问它们是否可以为null,但似乎暗示它们不能为null


因为
string
是引用类型,所以它们可以为null(并且必须为null)。无法强制(在编译时)它们具有非空值。

正如其他人所说,
字符串可以已经是空的。


由于您使用的是
字符串
,因此在使用参数之前,您需要对
字符串进行测试。IsNullOrEmpty(yourString)
,以验证值是否实际存在。

您需要在输入时检查字符串,使用
IsNullOrEmpty
可能是最好的方法(除非空字符串(“”)有效),然后,您可以返回null或设置默认值并继续处理,甚至抛出自己的异常(并在调用例程中捕获它)


我很想说,如果你有一个方法调用,你知道它不能接受空参数,在你调用这个方法并在你的调用类中处理它之前,你要检查它。

如果你正在编写这个方法并使用C#4,你可以使用

使用它,您可以为参数设置默认值


如果您只是在使用函数,那么您可以传入String.Empty而不是null字符串。

我很困惑,字符串是可以为null的……我想您的意思是您需要两个字符串输入,并且它们不应该为null,即,如何强制它们为非null。
if (CountryFrom == null)
    throw new ArgumentNullException("CountryFrom")
if (CountryTo == null)
    throw new ArgumentNullException("CountryTo")