2

我的代码中有一行notes = If(IsDBNull(notes),"","")。当我尝试在本地主机上运行它时,

我在第 51 行收到错误消息:

说明:在编译服务此请求所需的资源期间发生错误。请查看以下特定错误详细信息并适当修改您的源代码。

Compiler Error Message: BC30201: Expression expected.

Source Error:



Line 49:       End Try  
Line 50:       
**Line 51:     notes = If(IsDBNull(notes),"","")** 
Line 52:       'Context.Response.Output.Write("AAAA"+notes+"MMM")
Line 53:        if notes.Trim().Equals("TIMEUP") then  


Version Information: Microsoft .NET Framework Version:2.0.50727.5466; ASP.NET Version:2.0.50727.5459 

但是,当将相同的代码移植到生产环境时,它运行时没有任何故障,知道为什么吗?

4

3 回答 3

3

你的意思是:

IIf(IsDBNull(notes),"","")

注意额外的 I。

如果语句被声明为您在第 53 行看到的语句:

If <condition> Then

IIF 语句声明为:

IIf(Expression, True, False)

http://msdn.microsoft.com/en-gb/library/27ydhh0d(v=vs.71).aspx

于 2013-02-14T09:13:24.510 回答
3

问题是 VS 2008 引入了If-operator,但您正在编译为 .NET Framework Version:2.0。

这将在 .NET 2 上编译:

Dim notesObj As Object = IIf(IsDBNull(notes),"","")

不同之处在于它IIF返回一个对象,而If它是强类型的(C# 中的条件运算符 (?)),因此您可以编写:

Dim notesStr = If(IsDBNull(notes),"","") ' a string '
于 2013-02-14T09:17:02.227 回答
2

VB.NET 2008 引入了operator,它会短路——也就是说,只有一个 if-true 和 if-false 表达式被评估。If

在此之前,所有可用的都是function,它作为一个function,总是计算if-trueif-false 表达式。IIf

看起来您的生产机器使用的是 VB.NET 2008 或更高版本,而您的本地计算机使用的是 VB.NET 2005 或更早版本。

于 2013-02-14T09:16:49.100 回答