编译器说参数不能从字符串转换为int,但它不应该尝试转换它

时间:2017-02-08 20:05:24

标签: c#

我开始用“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();
        }
    }

1 个答案:

答案 0 :(得分:1)

您错过了所发布代码中的括号。您需要正确关闭random.Next()函数调用的表达式:

AnimateEnemy(enemy, random.Next((int)playArea.ActualHeight - 100),
            random.Next((int)playArea.ActualHeight - 100), "(Canvas.Top)");