获取用户输入的字符串并使用该字符串创建对象

时间:2014-10-27 06:03:06

标签: c# type-conversion

因此,我一直在研究这种感觉,感觉永远是什么,无法弄清楚我做错了什么。这里是我的代码的摘录,我希望字符串 CashierLOgInNName' s 值成为新的Cashier对象名称:

public class Cashiers
    { 
    public int CashierID;
    public int Password;
    public string FirstName;
    public string LastName;    
        public void SetCashiers(int CashierID, int Password,string FirstName, string LastName )
    {
        this.CashierID = CashierID;
        this.Password = Password;
        this.FirstName=FirstName;
        this.LastName = LastName;
    }

     Console.WriteLine("enter New Log in name");
                          string CashierLOgInNName= Console.ReadLine();

                          Console.WriteLine("enter First Name");
                          string CashierFirstName = Console.ReadLine();
                          Console.WriteLine("enter Last name");
                          string CashierLastName = Console.ReadLine();
                          Console.WriteLine("enter Cashier ID");
                          string f = Console.ReadLine();
                          int NewCashierID = Int32.Parse(f);
                          Console.WriteLine("enter Cashier Password");
                          string g = Console.ReadLine();
                          int NewCashierPWD = Int32.Parse(g);
                          CashierLOgInNName = (Cashiers)Activator.CreateInstance(null, CashierLOgInNName).Unwrap();

2 个答案:

答案 0 :(得分:0)

activator.createinstance和objecthandle.unwrap的MSDN文档可能会有所帮助。

Activator.CreateInstance Method

ObjectHandle.Unwrap Method

答案 1 :(得分:0)

首先进行一点修正。它将确保创建收银员的对象 cashierObj

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Activators
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("enter New Log in name");
            string CashierLOgInNName = Console.ReadLine();

            Console.WriteLine("enter First Name");
            string CashierFirstName = Console.ReadLine();
            Console.WriteLine("enter Last name");
            string CashierLastName = Console.ReadLine();
            Console.WriteLine("enter Cashier ID");
            string f = Console.ReadLine();
            int NewCashierID = Int32.Parse(f);
            Console.WriteLine("enter Cashier Password");
            string g = Console.ReadLine();
            Cashiers cashierObj = (Cashiers)Activator.CreateInstance(typeof(Cashiers), f, g, CashierFirstName, CashierLastName);
        }
    }
    public class Cashiers
    {
        public string CashierID;
        public string Password;
        public string FirstName;
        public string LastName;
        public Cashiers(string CashierID, string Password, string FirstName, string LastName)
        {
            this.CashierID = CashierID;
            this.Password = Password;
            this.FirstName = FirstName;
            this.LastName = LastName;
        }
    }
}

将下一部分CashierLOgInNName的值作为新的Cashier对象名称。这似乎很棘手,没用。我建议有更好的选择:

  1. 您可以在收银台中定义属性loginName
  2. 您可以创建Dictionary<string, Cashier> LoginName作为键,将Cashier Object作为值。
  3. 但是如果你坚持使用 CSharpCodeProvider Class ,还是允许从源代码动态创建一个程序集。 在源代码中,您可以将对象名称写为loginName,然后动态引用该程序集。

    然而,它没有任何意义,因为您无法使用该对象,因为它的名称仅在运行时为您所知。我希望这有助于你的好奇心。

      

    “在破坏的时候,创造一些东西。” - Maxine Hong Kingston