我對代碼分析Visual Studio中警告有點困惑。下面的代碼引起的:解釋的「CA1800:不要不必要地投」需要
static void Main(string[] args)
{
var something = new Something();
object expression = "Any value";
for (int i = 0; i < 2; i++)
{
switch (i)
{
case 0:
something.Help = expression as string;
break;
case 1:
something.Description = expression as string;
break;
}
}
}
class Something
{
public string Help;
public string Description;
}
...重複施放降低性能,尤其是當鑄件 在緊湊循環語句執行。對於顯式重複 投業務,投的結果存儲在一個局部變量和 使用本地變量而不是重複投業務。 ...
我可以使用和分配一個局部變量,是的。但上面顯示的演員將不會在一次迭代中執行。所以,在我看來,這不會比使用局部變量更昂貴。
在我的真實方法中,變量expression
可以具有其他類型的許多其他類型和類別Something
的屬性。還有另一個參數,它取代了i
,並且沒有for-loop
。
假設我創造的任何可能的類型的expression
一個局部變量。然後許多演員操作將被執行,而只有一個將需要。
for (int i = 0; i < 2; i++)
{
var type1 = expression as Type1;
var type2 = expression as Type2;
var type3 = expression as Type3;
var type4 = expression as Type4;
switch (i)
{
case 0:
something.*** = type1;
break;
case 1:
something.*** = type2;
break;
...
}
}
即貴...
有人可以告訴我這個警告的背景是什麼?這對我沒有任何意義。
您提供的代碼不會導致該警告我。這就是說,爲什麼'expression'首先被當作'object'而不是'string'輸入? – Servy 2015-04-02 14:24:16
@Servy你是否啓用了代碼分析?在我選擇的示例項目** Microsoft All Rules **中。提供的代碼是一個樣本,在語義上,這是沒有意義的。所以請刪除downvote .... – 2015-04-02 14:28:06
是的,我運行代碼分析,並沒有得到這個警告。在你的同樣的情況下,對於一個多餘演員的警告很有意義,因爲*你的樣本有一個多餘的演員*。如果你有一個樣本需要在該樣本中進行演員表,並且仍然收到警告,那麼*那*表示*某事*。也就是說,警告是警告;他們有誤報。這就是爲什麼他們不是錯誤。 – Servy 2015-04-02 14:30:12