我对Visual Studio中的代码分析警告有点困惑。以下代码提出了它:
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;
...
}
}
这很贵......
有人可以告诉我这个警告的背景吗?这对我没有任何意义。
答案 0 :(得分:3)
警告表示您因循环而多次重建。这应解决它:
var something = new Something();
object expression = "Any value";
string expressionAsString = expression as string;
for (int i = 0; i < 2; i++)
{
switch (i)
{
case 0:
something.Help = expressionAsString;
break;
case 1:
something.Description = expressionAsString;
break;
}
}
那就是说,正如Servy提到的警告是警告 - 如果您的代码更容易理解多个演员和它不会显着影响性能(这只能通过尝试来确定)两种方式并测量差异)然后忽略或抑制警告。我已经看到太多代码难以理解和/或难以理解,只是为了避免不理解代码上下文的警告 。