如何传递物体?

时间:2014-02-07 05:25:20

标签: c# parameter-passing pass-by-reference

主要问题是我已经创建并填充了模型,因此我不想创建新模型。 Query方法使用模型进行比较,因此如果我将其传入,我需要在调用方法时找到引用它的方法。

但是如果我在switch方法中将它声明为引用变量,那么调用它,我得到一个错误“使用未分配的局部变量'UModel'”

如果我在方法之外声明它,我会遇到一个问题“非静态字段需要对象引用”

你能告诉我发生了什么以及可能如何修复它吗?

这是我的控制器,我在其中创建模型并传入OP变量:

public static void CompareLogin(User_LoginView Login_View)
    {
        // Creates a new oject of User_Model and populates it from the User_Controller.
        User_Model UModel = new User_Model();
        UModel.Name = screenName;
        UModel.Pwd = screenPwd;

        // Runs the Login Comparsion in the Database_Facade, and passes in the Read Operation variable.
        new Database_Facade();
        Database_Facade.Operation_Switch(OPREAD);
    }

这是我的外观:

public static void Operation_Switch(int OP)
    {
        Database_MySQLQueryFunctions SqlQuery;
        User_Model UModel;
        PAC_Model PModel;
        Cable_Model CModel;

        switch (OP)
        {
            case 101:
                SqlQuery = new Database_MySQLQueryFunctions();
                SqlQuery.GetLoginAccess(UModel);
            // Repopulates the Model to return the Access Level.
                break;
            case 102:
                SqlQuery = new Database_MySQLQueryFunctions();
                SqlQuery.SetLoginAccess(PModel);
                break;
            case 103:
                SqlQuery = new Database_MySQLQueryFunctions();
                SqlQuery.UpdateUser(CModel);
                break;
        }

以下是模型:

public class User_Model
{
    public string Name { get; set; }
    public string Pwd { get; set; }
    public string ConfirmPwd { get; set; }
    public int AccessLevel { get; set; }


    public User_Model()
    {
        Name = null;
        Pwd = null;
        ConfirmPwd = null;
        AccessLevel = 0;
    }
}

1 个答案:

答案 0 :(得分:0)

解决方案1 ​​

将UModel声明为静态变量(在方法之外),如:

public static User_Model UModel;

并更改

User_Model UModel = new User_Model();

UModel = new User_Model();

并删除

User_Model UModel;
来自Operation_Switch的


解决方案2

将UModel作为参数传递给Operation_Switch

改变

public static void Operation_Switch(int OP)

public static void Operation_Switch(int OP, User_Model UModel)

去除

User_Model UModel;

来自Operation_Switch并更改

Database_Facade.Operation_Switch(OPREAD);

Database_Facade.Operation_Switch(OPREAD, UModel);