我有一个非常简单的课程Address
:
public class Address
{
public string Name { get; set; }
public string Country { get; set; }
}
我将Name
声明为string
而将 NOT 声明为string?
,因为它永远不会是null
。
现在我有一个方法,我得到这个类的实例作为参数:
public List<Address> SearchAddress(Address search)
{
...
if (!search.Name.Equals(string.Empty))
{
temp = query.Where(a => a.Name.Contains(search.Name));
}
...
}
现在我的同事打电话给这个方法我得到System.ArgumentNullException
,因为search.Name
是null
。
如果我有一个不可为空的int
属性,如果我没有为其分配任何值,我将0
作为值。
如果没有分配值而不只是string
,为什么不可为空的null
属性string.Empty
?
答案 0 :(得分:4)
int
是不可为空的值类型(即struct
)。值类型字段将初始化为其默认值。例如,int
为0,bool
为false等。完整列表here。
如果您希望能够将null
分配给值类型变量,则可以使用Nullable<T> where T : struct
,如果是int
,则Nullable<int>
/ {{ 1}}。
int?
是引用类型。引用类型可以为null,引用类型字段将初始化为null。因此,不允许string
/ Nullable<string>
,也不会有意义。
在您的情况下,您需要检查string?
字符串是空还是空
Name
答案 1 :(得分:0)
答案 2 :(得分:0)
如果实例为Null且为空字符串,则可以使用string.IsNullOrEmpty
来确定实例。
答案 3 :(得分:0)
string是一个引用类型,默认为null。 String.empty等效于双引号空字符串(“”),因此null与String.empty不同。