1

我创建了一个名为 ProfileHelper 的类,但我似乎无法正确获取我的 get/set 访问器;相反,我在 get 和 set 上都出现了红线。这是我尝试使用的代码:

public static String UserName(string columnName)
{ 
    get
    {
        using (SqlConnection cn = new SqlConnection(SiteConfig.ConnectionString))
        {
            string sSql = ("SELECT UserName , LoweredUserName FROM  aspnet_Users  WHERE UserId = @UserId");

            using (SqlCommand cm = new SqlCommand(sSql, cn))
            {
                cm.Parameters.AddWithValue("@UserId", Membership.GetUser().ProviderUserKey.ToString());
                cn.Open();
                using (SqlDataReader rd = cm.ExecuteReader())
                {
                    while (rd.Read())
                    {
                        return columnName;
                    }
                    rd.Close();
                }
                cn.Close();
            }         
        }            
        return columnName;
    }
    set
    {
        using (SqlConnection cn = new SqlConnection(SiteConfig.ConnectionString))
        {
            string sSql = ("UPDATE [aspnet_ Users] SET UserName = @UserName, LoweredUserName = @LoweredUserName WHERE UserId = @UserId");

            using (SqlCommand cm = new SqlCommand(sSql, cn))
            {
                cm.Parameters.AddWithValue("@UserId", Membership.GetUser ().ProviderUserKey.ToString());
                cn.Open();
                cm.ExecuteNonQuery();
                cn.Close();
            }    
        } 
    }
}
4

3 回答 3

8

那是一种方法,而不是一种属性。只有属性有 get 和 set 访问器。选一个。

public static String UserName(string columnName) // this implies a method
     { 
      get // this implies a property
      {
于 2012-05-10T13:02:14.690 回答
7

语法基本上是:

private string userName;
public string UserName // no parameter here!
{
  get { return this.userName; }
  set { this.userName = value; } // value is a keyword
}

或者,自动属性为您提供支持字段:

public string UserName { get; set; } // equivalent
public string MyExternallyReadOnly { get; private set; } // setter is private

您不应该属性中摆弄 SQL 连接。访问属性应该是快速和可靠的。考虑用方法替换它,以明确这实际上是一个具有外部依赖关系的更持久的操作(这更有可能失败):

public string GetUserName() { }
public void UpdateUserName() {}
于 2012-05-10T13:04:13.193 回答
2

您应该制作一对方法,GetUserName(string columnName)并且SetUserName(string columnName, string value). 当它可能需要一段时间时,这是首选方法,例如因为您正在建立数据库连接,并且可以让您轻松获得参数。

public static String UserName(string columnName)是方法的签名。 public static String UserName将是一个财产。属性有 get/set 访问器,方法没有。你需要改变这一点。属性不允许参数,除了索引属性,它不能是静态的(例如使用 like myObj[someColumnName],声明 like public string this[string columnName])。如果您希望访问类似 的属性var something = ProfileHelper.UserName;,只需使用属性。

于 2012-05-10T13:07:00.180 回答