代码之家  ›  专栏  ›  技术社区  ›  Gaudreau95

VB WPF到C#WPF

  •  1
  • Gaudreau95  · 技术社区  · 9 年前

    我正试图从使用VB WPF转到使用C#WPF,由于我拥有大量的代码,我目前尝试的是使用在线转换器。问题是,我在理解出现的一些错误时遇到了一些困难,作为C#的初学者,我有点迷茫。

    下面的代码是我目前在标准VBWPF中使用的,工作非常好,是c#转换器将其更改为的代码的副本。(注意,我在VB和C#中都添加了Bing Maps WPF参考)

    Private Sub Aberdeen() Handles BTNCounty.Click
        If TXTCounty.Text = "Aberdeen" Then
    
            Dim CountyLocation(2) As Microsoft.Maps.MapControl.WPF.Location
    
            CountyLocation(0) = New Microsoft.Maps.MapControl.WPF.Location(57.143652, -2.1056584)
            CountyLocation(1) = New Microsoft.Maps.MapControl.WPF.Location(57.143652, -2.1056584)
            CountyLocation(2) = New Microsoft.Maps.MapControl.WPF.Location(57.124838, -2.0991633)
    
    
    Dim names = New String() {"Aberdeen Central",   "Aberdeen Lochnagar", "Aberdeen Kincorth"}
    
     For index = 0 To CountyLocation.Length - 1
                Dim Pin = New Microsoft.Maps.MapControl.WPF.Pushpin()
    
                Dim CoordinateTip = New ToolTip()
                CoordinateTip.Content = names(index)
    
                Pin.Location = CountyLocation(index)
                Pin.ToolTip = CoordinateTip
                BingMap.Children.Add(Pin)
    
    
    
            Next
    
    
        End If
    End Sub
    

    下面是将代码转换为c的示例#

    private void Aberdeen()
    {
    
    if (TXTCounty.Text == "Aberdeen") {
        Microsoft.Maps.MapControl.WPF.Location[] CountyLocation = new Microsoft.Maps.MapControl.WPF.Location[3];
    
        CountyLocation(0) = new Microsoft.Maps.MapControl.WPF.Location(57.143652, -2.1056584);
        CountyLocation(1) = new Microsoft.Maps.MapControl.WPF.Location(57.143652, -2.1056584);
        CountyLocation(2) = new Microsoft.Maps.MapControl.WPF.Location(57.124838, -2.0991633);
    
    
        dynamic names = new string[] {
            "Aberdeen Central",
            "Aberdeen Lochnagar",
            "\tAberdeen Kincorth"
        };
    
        for (index = 0; index <= CountyLocation.Length - 1; index++) {
            dynamic Pin = new Microsoft.Maps.MapControl.WPF.Pushpin();
    
            dynamic CoordinateTip = new ToolTip();
            CoordinateTip.Content = names(index);
    
            Pin.Location = CountyLocation(index);
            Pin.ToolTip = CoordinateTip;
            BingMap.Children.Add(Pin);
    
    
    
        }
    
    
    }
    }
    

    我收到了3个错误,我想知道你能否告诉我它们的意思以及如何解决问题?

    1. CountyLocation是一个变量,但用作方法?

    2名称索引在当前上下文中不存在?

    3 System.Windows.FrameworkElement。ToolTip是一个属性,但像类型一样使用?

    任何帮助都将非常感激,因为这对我来说是一个非常重要的外国领土。

    1 回复  |  直到 9 年前
        1
  •  6
  •   Kenneth    9 年前

    请在线查看答案。 主要问题是转换器已经转换了所有类型推断调用( Dim variable = ... )这是不正确的。你应该使用 var 用于类型推断。

    private void Aberdeen()
    {
    
        if (TXTCounty.Text == "Aberdeen") {
            Microsoft.Maps.MapControl.WPF.Location[] CountyLocation = new Microsoft.Maps.MapControl.WPF.Location[3];
    
            // Error 1: Setting array variables is done using square brackets, otherwise it's considered a method invocation
            CountyLocation[0] = new Microsoft.Maps.MapControl.WPF.Location(57.143652, -2.1056584);
            CountyLocation[1] = new Microsoft.Maps.MapControl.WPF.Location(57.143652, -2.1056584);
            CountyLocation[2] = new Microsoft.Maps.MapControl.WPF.Location(57.124838, -2.0991633);
    
            // extra: you don't need dynamic here, just var will do
            var names = new string[] {
                "Aberdeen Central",
                "Aberdeen Lochnagar",
                "\tAberdeen Kincorth"
            };
    
            // Error 2: you need to declare the index variable (added var)
            for (var index = 0; index <= CountyLocation.Length - 1; index++) {
                // Error 3: don't need dynamic here
                var Pin = new Microsoft.Maps.MapControl.WPF.Pushpin();
    
                // don't need dynamic here 
                var CoordinateTip = new ToolTip();
                // Same as error 1: Array access is done with square brackets
                CoordinateTip.Content = names[index];
    
                // Same as error 1: Array access is done with square brackets    
                Pin.Location = CountyLocation[index];
                Pin.ToolTip = CoordinateTip;
                BingMap.Children.Add(Pin);
            }   
        }
    }