我正在使用SQLDataReader从数据库中检索可能为null的值.我已经解决了如何处理Null字符串值,但无法使用相同的技巧来处理整数或布尔值:
Using cmd As DbCommand = store.GetStoredProcCommand("RetrievePOCO")
store.AddInParameter(cmd, "ID", DbType.Int32, ID)
Using reader As IDataReader = store.ExecuteReader(cmd)
If reader.Read() = True Then
Dim newPOCO As New POCO()
With newPOCO
'If the source column is null TryCast will return nothing without throwing an error
.StatusXML = TryCast(reader.GetString(reader.GetOrdinal("StatusXML")), String)
'How can a null integer or boolean be set elegantly?
.AppType = TryCast(reader.GetInt32(reader.GetOrdinal("AppType")), System.Nullable(Of Integer))
.Archived = TryCast(reader.GetBoolean(reader.GetOrdinal("Archived")), Boolean)
Run Code Online (Sandbox Code Playgroud)
那么如何优雅地设置null整数或布尔值呢?我已经在C#中看到了建议,但它们没有正确转换为VB,给出'TryCast操作数必须是引用类型,但是整数?是值类型'编译器错误.
什么是运营商的VB.NET等价物C# ??
例如,如何编写以下代码VB.NET?
hp.pt = iniFile.GetValue("System", "PT").ToUpper().Equals("H") ? PT.PA : PT.SP
Run Code Online (Sandbox Code Playgroud) 一个简单的问题,if inline:dim mydate as datetime?
'版本1(工作!)
If dtReader.IsDBNull(dtReader.GetOrdinal("mydate")) Then
mydate = Nothing
Else
mydate = dtReader.GetDateTime(dtReader.GetOrdinal("mydate"))
End If
Run Code Online (Sandbox Code Playgroud)
价值=没有
'版本2(DOENSN'T WORK!)
mydate = If(dtReader.IsDBNull(dtReader.GetOrdinal("mydate")), Nothing, dtReader.GetDateTime(dtReader.GetOrdinal("mydate")))
Run Code Online (Sandbox Code Playgroud)
价值=#12:00:00#
有人可以解释为什么版本2获得此值吗?
我遇到过一些看起来像这样的代码
If (condition) Then
array(index) = array(index) Or variable
End If
Run Code Online (Sandbox Code Playgroud)
由于不熟悉VB,它在我看来就像是在赋值语句和条件子句之间的某种可爱的结果.
在功能上,我认为它看起来像某种?:三元操作.我现在假设它,虽然肯定不是我习惯的形式.
我知道第一个分支会为自己分配数组(索引),这实际上就是我正在处理的代码是如何工作的.我不认为它与这个问题有关,但它有点让我感到奇怪,并且通常比我用VB意识到的要多得多.
不是重复的是VB.NET中有条件三元运算符吗?因为那个问题是询问是否有一个,而不是"这是什么意思"
我正在尝试将c#代码转换为vb.net,但我很难转换符号"?" 在c#到vb.net.这里我的代码转换
public audit_trail Mapper(IDataReader rdr)
{
audit_trail audit_trail = new audit_trail();
audit_trail.Log_id = rdr["Log_id"] is DBNull ? 0 : (int)rdr["Log_id"];
audit_trail.Host = rdr["Host"] is DBNull ? string.Empty : (string)rdr["Host"];
return audit_trail;
}
Run Code Online (Sandbox Code Playgroud)
如何转换标志"?" 到vb.net ??
我想转换
audit_trail.Host = rdr["Host"] is DBNull ? string.Empty : (string)rdr["Host"];
Run Code Online (Sandbox Code Playgroud)
喜欢的东西
if rdr["Host"] is DBNull.Value then
audit_trail.Host = string.Empty
else
audit_trail.Host = rdr["Host"]
end if
Run Code Online (Sandbox Code Playgroud)
但代码太长,代码行太多..你们有没有想法转换为短代码?
我是一名C#程序员,但在VB.Net中涉足,因为我团队中的其他人都使用它.为了专业发展的利益,我想缩小以下的If ... Else ...声明.
If cmd.Parameters("@whenUpdated").Equals(DBNull.Value) Then
item.WhenUpdated = Nothing
Else
item.WhenUpdated = cmd.Parameters("@whenUpdated").Value
End If
Run Code Online (Sandbox Code Playgroud)
我很欣赏已经有的例子,但是我不能让它适用于这个具体案例.
干杯,伊恩.
可能的重复:
VB.NET中是否有条件三元运算符?
我在c#网站的asp.net中有以下代码,但我必须在vb.net网站中使用此代码,但即使代码转换器也无法转换代码,请帮助我做到这一点。这是我的代码
<asp:CheckBox ID="chkStatus" runat="server"
AutoPostBack="true" OnCheckedChanged="chkStatus_OnCheckedChanged"
Checked='<%# Convert.ToBoolean(Eval("Approved")) %>'
Text='<%# Eval("Approved").ToString().Equals("True") ? " Approved " : " Not Approved " %>' />
</ItemTemplate>
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)
在这里我想改变这条线 Text='<%# Eval("Approved").ToString().Equals("True") ? " Approved " : " Not Approved " %>'
对于vb.net网站,请帮助我做到这一点。