检查每个级别的对象是否存在

时间:2016-04-22 03:27:13

标签: c#

让我们考虑一个示例模型如下。

class student
{
    public int ID { get; set; }
    public string Name { get; set; }
    public school SchoolName { get; set; }
}

class school
{
    public int ID { get; set; }
    public string Name { get; set; }
}

student student1 = new student();

众所周知,我们如下所示访问学校名称。

Console.WriteLine(student1.SchoolName.Name);

如果school未分配给student,则student1.SchoolName将为空。所以上面的Console.WriteLine()失败了。

我最终为所有这些元素写了一个if语句,这对a $$来说是一种痛苦。我们是否有其他方法来处理这些案件?

6 个答案:

答案 0 :(得分:4)

试试这个:

    While ( $ie.busy -eq $true){ 
        [System.Threading.Thread]::Sleep(2000); 
        $wshell = New-Object -ComObject wscript.shell;
        if($wshell.AppActivate('Message from webpage'))
        {
            [System.Threading.Thread]::Sleep(1000); 
            [System.Windows.Forms.SendKeys]::SendWait('{Enter}')
        }
    }

如果SchoolName为null,则不会评估Name属性。

答案 1 :(得分:2)

不幸的是,我们必须对null

以前的版本进行明确的C#检查

C# 6.0我们有Null-Conditional运算符?

此运算符完全按照您所查找的内容运行,如果运算符的左侧为空,则将结果类型的空值向右级联。

所以你可以这样做。

Console.WriteLine(student1.SchoolName?.Name);

简而言之,如果您使用空条件运算符.替换?.,它会将空值级联到该行:

选中此Example

答案 2 :(得分:1)

在旧版本的C#中(在c#6之前)您可以尝试使用条件运算符:

Form2:= TForm2.create(nil);
Form2.Show;// raised exception here.

答案 3 :(得分:1)

为您提供的其他选择:

1.定义属性inoremap case<Space><expression>:<CR> case<Space><expression>:{<CR>}break;<Esc>ko ,如下所示:

SchoolName

2.在打印值

之前检查null
private school _SchoolName;
public school SchoolName
{
    get
    {
        if (_SchoolName == null)
            return new school() { ID = 0, Name = string.empty };
        else
            return _SchoolName;
    }
    set { _SchoolName = value; }
}

答案 4 :(得分:0)

如果您在6.0之前使用的是C#版本,则可以使用Ternary Operatory

Console.WriteLine(student1.SchoolName == null ? string.empty : student1.SchoolName.Name);

或者,“Null conditional operator&#39;会做的伎俩:

Console.WriteLine(student1.SchoolName?.Name);

答案 5 :(得分:0)

最佳做法是这样的:

class student
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    [ForeignKey(...)]
    public virtual school School { get; set; }
}

class school
{
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual List<student> Students {get; set; }
}

student student1 = new student();
相关问题