我需要帮助转换VB.Net代码块到c#(设置属性与DataTable值)
本文关键字:设置 属性 DataTable 帮助 转换 VB 代码 Net | 更新日期: 2023-09-27 18:06:23
我正在编写我的第一个c#应用程序,在这种情况下,它只是一个"学习练习"。这个例子是一个简化的代码块,我在VB中使用过很多次。Net,所以我知道它工作正确。这是VB代码的样子。
Public Class User
Private Const CN_LoginId As String = "Login"
Private Const CN_Password As String = "Password"
Private _password As String
Public Property Password() As String
Get
Return _password
End Get
Set(ByVal value As String)
_password = value
End Set
End Property
Public Shared Function Create(ByVal Login As String) As User
Dim usr = New User()
Using dt As DataTable = DAC.ExecuteDataTable("usp_PasswordSelect", _
DAC.Parameter(CN_LoginId, Login))
With dt.Rows(0)
usr.Password = CStr(.Item(CN_Password))
End With
End Using
Return usr
End Function
End Class
所以在c#中,我尝试过手工转换它,并使用Telerik的在线转换实用程序,这就是我在下面发布的内容,因为我假设它更接近正确的答案,然后我自己做了什么。
public class User
{
private const string CN_LoginId = "Login";
private const string CN_Password = "Password";
private string _password;
public string Password
{
get { return _password; }
set { _password = value; }
}
public static User Create(string Login)
{
object usr = new User();
using (DataTable dt = DAC.ExecuteDataTable("usp_PasswordSelect",
DAC.Parameter(CN_LoginId, Login)))
{
{
usr.Password = Convert.ToString(dt.Rows(0).Item(CN_Password));
}
}
return usr;
}
}
我得到的第一个错误是在这行usr。Password = Convert.ToString(dt.Rows(0). item (CN_Password));错误是"错误1 'object'不包含'Password'的定义,并且没有找到接受'object'类型的第一个参数的扩展方法'Password'(您是否缺少using指令或程序集引用?)
在这一点上,我假设当我修复第一个错误时,第二个错误就会消失。所以我的问题是如何正确地设置这个对象的属性使用c#中的数据表?我是这样写的:
public class User
{
private const string CN_LoginId = "Login";
private const string CN_Password = "Password";
public string Password { get; set; }
public static User Create(string Login)
{
User usr = new User();
using (DataTable dt = DAC.ExecuteDataTable("usp_PasswordSelect",
DAC.Parameter(CN_LoginId, Login)))
{
usr.Password = Convert.ToString(dt.Rows[0][CN_Password]);
}
return usr;
}
}
一些注意事项:
- c#访问数组使用方括号,而不是父括号。所以
Rows(0)
不正确,应该是Rows[0]
。 - 我同意Bernard的观点,你应该将
User
对象声明为User
,而不是object
。您将失去对其属性的所有可见性。你也可以使用var
,但如果你正在学习c#,你最好显式声明你的变量类型。它可以导致重复声明(例如User u = new User()
),但至少你会清楚地看到你的变量是什么类型。 - 你不需要使用
Item
访问数组项…只要把它作为你正在处理的行元素中的元素。这就是为什么我有dt.Rows[0][CN_Password]
的双数组。同样,c#使用方括号,而不是父括号来访问数组元素。 - 这只是一个风格的东西,但我删除了你的
_password
字段,只是使用了Password
的自动属性。我没有看到_password
在你的代码中使用,并认为它只会使事情变得混乱。自动属性有一个由编译器自动创建的后备字段,因此您不必跟踪变量和属性。如果你使用很多属性,这可以节省很多时间。
您需要声明user的类型(在您的代码中,user是一个对象,在运行时是user,但在编译时不是)。您可以执行以下操作:
var user = new User();
或
User user = new User();
除了注释。正如乔纳森·狄金森所说:
user.Password = dt.Rows[0]["Password"];