C# 为什么PowerShell不抛出此异常?

C# 为什么PowerShell不抛出此异常?,c#,powershell,sharepoint,C#,Powershell,Sharepoint,使用SharePoint API,我一直在研究尝试通过索引器获取不存在的SPList与使用TryGetList之间的区别。我假设索引器在TryGetList没有抛出异常的情况下抛出异常。C的情况似乎确实如此: SPSite site = new SPSite("http://urlofsite"); Console.WriteLine(site.RootWeb.Lists["hello"].Title); 它抛出ArgumentException,并显示以下消息: 但是,当我使用PowerSh

使用SharePoint API,我一直在研究尝试通过索引器获取不存在的SPList与使用TryGetList之间的区别。我假设索引器在TryGetList没有抛出异常的情况下抛出异常。C的情况似乎确实如此:

SPSite site = new SPSite("http://urlofsite");
Console.WriteLine(site.RootWeb.Lists["hello"].Title);
它抛出ArgumentException,并显示以下消息:

但是,当我使用PowerShell时,不会引发异常:

$site = Get-SPSite http://urlofsite
$site.RootWeb.Lists["hello"].Title
我假设PowerShell只是.NET代码的包装器,索引器本身也会抛出异常,但如果是这样,PowerShell不会也抛出异常吗?我知道在许多情况下,PowerShell不会抛出异常,而C会抛出异常,最明显的是,在代码中获取null对象的属性时会抛出NullReferenceExceptions,但我认为这与PowerShell的语法和计算有关

SharePoint API在此实例中是否具有适用于PowerShell的特殊条件?或者这是PowerShell中固有的东西,或者忽略索引器以便将内容传递到管道中?但这似乎也不对。。。我误解了什么


额外的SharePoint问题-在使用PowerShell时,是否有任何理由在列表索引器上使用TryGetList?

您可以通过运行cmdlet来尝试了解幕后发生的情况

例如:

Trace-Command -Expression {$site.RootWeb.Lists["hello"].Title} -PSHost -Name *
Name参数表示要跟踪的Windows PowerShell组件的名称。您可以从cmdlet获取跟踪源列表,并仅包括必要的跟踪源

Trace-Command -Expression {$site.RootWeb.Lists["hello"].Title} -PSHost -Name *