我开始用“Head First”系列学习C#。我已经从头开始4次练习“拯救人类”,但它根本行不通。 在我上次做的时候,问题是:我用四个参数编写了一个方法,最后一个参数是一个“字符串”。第一次调用时调用此方法两次,最后一个参数为“(Canvas.Left)”,第二次调用时调用“(Canvas.Top)”。 它在第一次通话时没有显示任何问题。但在第二个,它一直说“Argument2:不能将'String'转换为'int'。我已经计算了参数的位置,一切似乎都已到位。我检查了很多次书中的代码,一切都是就像这本书一样。 可能是什么导致了这个?这是代码:
private void AddEnemy()
{
ContentControl enemy = new ContentControl();
enemy.Template = Resources["EnemyTemplate"] as ControlTemplate;
AnimateEnemy(enemy, 0, playArea.ActualWidth - 100, "(Canvas.Left)");
AnimateEnemy(enemy, random.Next((int)playArea.ActualHeight - 100),
random.Next((int)playArea.ActualHeight - 100,"(Canvas.Top)");
playArea.Children.Add(enemy);
}
private void AnimateEnemy(ContentControl enemy, double from, double to, string propertyToAnimate)
{
Storyboard storyboard = new Storyboard() { AutoReverse = true, RepeatBehavior = RepeatBehavior.Forever };
DoubleAnimation animation = new DoubleAnimation()
{
From = from,
To = to,
Duration = new Duration(TimeSpan.FromSeconds(random.Next(4, 6))),
};
Storyboard.SetTarget(animation, enemy);
Storyboard.SetTargetProperty(animation, new PropertyPath(propertyToAnimate));
storyboard.Children.Add(animation);
storyboard.Begin();
}
}
答案 0 :(得分:1)
您错过了所发布代码中的括号。您需要正确关闭random.Next()
函数调用的表达式:
AnimateEnemy(enemy, random.Next((int)playArea.ActualHeight - 100),
random.Next((int)playArea.ActualHeight - 100), "(Canvas.Top)");