我在ActionFilter中從ViewData.Model
得到object
,我需要確保它符合給定的接口。這裏有一個例子:「內聯臨時變量」(IDE0019)修復與接口一起使用時會導致語法錯誤
object d = DateTime.Now;
IComparable c = d as IComparable;
if (c != null)
{
//do stuff
}
的Visual Studio 2017年給了我一個IDE0019在第二行「內聯臨時變量」的建議。選擇它重構代碼到這:
object d = DateTime.Now;
if (d is IComparable c) // Line 31
{
//do stuff
}
我喜歡這種語法,我想使用它。有沒有在編輯器中顯示錯誤,但建設時,我得到錯誤的一長串:
1>C:\Users\me\MyProject\MyFile.cs(31,34,31,35): error CS1026:) expected
1>C:\Users\me\MyProject\MyFile.cs(31,35,31,36): error CS1002: ; expected
1>C:\Users\me\MyProject\MyFile.cs(31,35,31,36): error CS1513: } expected
第31行是if
聲明。它看起來像編譯器期待更多的語法,但我無法弄清楚什麼。生成的代碼看起來與這個例子從the documentation for is
:
public int CompareTo(Object o)
{
if (o is Employee e)
{
return Name.CompareTo(e.Name);
}
throw new ArgumentException("o is not an Employee object.");
}
如何解決這些錯誤?我在VS2017(26430.14)和.NET Framework v4.0.30319上。
現有的項目還是新的?更新所有軟件包?它編譯後是否真的運行?你有ReSharper嗎?該項目是否使用C#7編譯器(屬性 - >生成 - >高級)? – CodeCaster
@CodeCaster現有的ASP.NET MVC項目。構建失敗並且錯誤出現在構建輸出中,但不在錯誤列表中。 – Undo
@CodeCaster屬性 - 編譯 - 我的啓動項目中的高級顯示「默認」作爲語言版本 - 不知道這意味着什麼。不確定我是否有ReSharper。我在哪裏看? – Undo