让我们考虑一个示例模型如下。
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 $$来说是一种痛苦。我们是否有其他方法来处理这些案件?
答案 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.在打印值
之前检查nullprivate 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();