非可空属性为null

时间:2014-02-19 09:36:08

标签: c#

我有一个非常简单的课程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.Namenull

如果我有一个不可为空的int属性,如果我没有为其分配任何值,我将0作为值。

如果没有分配值而不只是string,为什么不可为空的null属性string.Empty

4 个答案:

答案 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)

String可以保存空值,就像那样简单!

String是一种引用类型,但具有某种值类型的行为。

请阅读此主题:Null strings and empty strings

答案 2 :(得分:0)

如果实例为Null且为空字符串,则可以使用string.IsNullOrEmpty来确定实例。

答案 3 :(得分:0)

string是一个引用类型,默认为null。 String.empty等效于双引号空字符串(“”),因此null与String.empty不同。