2011-12-31 65 views
-2

我有以下vb.net代码和我得到的语法错误它Vb.net代码语法错误

更新

Protected Sub OpenLogin_Click(ByVal src As Object, ByVal e As CommandEventArgs) 
     Dim StrUri As String = e.CommandArgument.ToString() 
     Dim openid As New OpenIdRelyingParty() 
     Dim b = New UriBuilder(Request.Url) 
     With Key 
      .Query = "" 
     End With 
     'var b = new UriBuilder(Request.Url) { Query = "" }; 

     Dim req = openid.CreateRequest(StrUri) 

     Dim fetchRequest = New FetchRequest() 
     fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.Email) 
     fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.First) 
     fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.Last) 

     req.AddExtension(fetchRequest) 

     req.RedirectToProvider() 

    End Sub 

现在在代码中的错误是“关键不是宣称”我现在应该怎么做

+0

删除'键'保留字和'结束与'。两者都不是必需的。 – lsuarez 2011-12-31 06:34:22

+0

我已经完成了{Query =“”}但现在错误是“With必须以匹配的结束标记结尾” – 2011-12-31 06:37:34

+0

然后,您不需要将block分隔到新行或使用行连续字符“_”。 – lsuarez 2011-12-31 06:38:15

回答

0

两个问题:

  1. Key保留字是唯一的识别用于使用Enumerable.GroupBy分组的多部分密钥时使用。使用它们的构造函数设置对象属性并不是必需的。

  2. 您所遇到的问题,让你已经分居了With装饰到一个新的生产线,这是语法不正确的,因为你现在把它当作一个With块,这意味着每个网点的访问将针对可变紧随With声明。您需要使用续行符或将With在同一行作为对象的构造函数:

例1

Dim b = New UriBuilder(Request.Url) With { 
      .Query = "" 
     } 

例2

Dim b = New UriBuilder(Request.Url) _ 
      With { .Query = "" } 

编辑:

您不能在Visual Studio 2005/.NET 2.0项目中使用此语法。只需构建对象然后初始化属性:

Dim b As New UriBuilder(Request.Url) 
b.Query = "" 
+0

我用你的Ex1和Ex2,但它仍然给“错误的声明是期待的”错误。现在做什么? – 2011-12-31 06:47:11

+0

您使用的是什么版本的Visual Studio和.NET库? – lsuarez 2011-12-31 06:48:11

+0

我很确定内联属性初始化不受支持。只需构建你的对象并在下一行设置属性。 – lsuarez 2011-12-31 06:56:03

0

AFAIK,你不需要大括号。

With Something 
    .Property1 = True 
    .Property2 = "Inactive" 
    ' And so on 
End With 

UPDATE

With Key 
    .Query = "" 
End With 

为什么你需要一个WITH子句在这里呢?以上是语法上等同于

Key.Query = "" 
+0

请告诉根据我的代码 – 2011-12-31 06:42:03

+0

我应该写什么用{Key .Query =“”} End With – 2011-12-31 06:43:28

+0

检查我的更新。 – 2011-12-31 06:45:56

0

声明Key变量或将其从代码中移除。