当前位置:编程学习 > C#/ASP.NET >>

关于动态取变量名的值

我有变量名:
private string AA = "aa";
private string BB = "bb";

public string this[string test]
{
  get
   {
程序代码
}
}
要求,如果我的test的值是AA(这里要求也上面定义的变量名相符),则返回:aa
如果是BB 则返回bb --------------------编程问答-------------------- class Class1
{
static void Main(string[] args)
{
MyList list = new MyList();
Console.WriteLine(list["AA"]);
Console.WriteLine(list["BB"]);
}
}

public class MyList
{
System.Collections.Hashtable hash = new System.Collections.Hashtable();
public MyList()
{
hash.Add("AA","aa");
hash.Add("BB","bb");
hash.Add("CC","cc");
}
public string this[string str] 

get {return str + ":" + hash[str].ToString();}


} --------------------编程问答-------------------- 谢谢楼上的,我这里用的是WEB FORM 
是放在MODEL里的,所以不想用HASHTABLE
看一下有没有正色好的办法呢 --------------------编程问答-------------------- 自己搞定了,谢谢大家,

    private string HeiHei = "看看能不能";

    public string HeiH
    {
        get
        {
            return HeiHei;
        }
    }
    public string this[string ss]
    {
        get
        {
          return   this.GetType().GetField(ss, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public).GetValue(this).ToString();
        }
    } --------------------编程问答-------------------- 不知道这样会不会影响效率,这里用到了反射,如果直接用属性,两者的速度将会怎么样呢
    public string HeiH
    {
        get
        {
            return HeiHei;
        }
    }
去完成对外的取值,大家在这里讨论一下吧 --------------------编程问答-------------------- 用反射性能肯定下降很多,为什么不想用Hashtable? --------------------编程问答-------------------- 这样吧,怎样?
public string this[string ss]
    {
        get
        {
            switch(ss){
            case "AA" :
                return "aa";
            case "BB" :
                return "bb";
            ...
            }
        }
    }
--------------------编程问答-------------------- TO:不知道这样会不会影响效率,这里用到了反射,如果直接用属性,两者的速度将会怎么样呢

用反射方法不错,效率上当然会低..

但用反射也比较灵活,如果对效率要求不是很高的话,建议还是用反射..

--------------------编程问答-------------------- 谢谢,我也是正为这个事发悠呢 --------------------编程问答-------------------- 在MODEINFO层用HASHTABLE好像有点行不通呀
 public class CartItemInfo {

        // Internal member variables
        private int quantity = 1;
        private string itemId;
        private string name;
        private string type;
        private decimal price;
        private string categoryId;
        private string productId;

        /// <summary>
        /// Default constructor
        /// </summary>
        public CartItemInfo() { }

        /// <summary>
        /// Constructor with specified initial values
        /// </summary>
        /// <param name="itemId">Id of item to add to cart</param></param>
        /// <param name="name">Name of item</param>
        /// <param name="qty">Quantity to purchase</param>
        /// <param name="price">Price of item</param>
        /// <param name="type">Item type</param>   
        /// <param name="categoryId">Parent category id</param>
        /// <param name="productId">Parent product id</param>
        public CartItemInfo(string itemId, string name, int qty, decimal price, string type, string categoryId, string productId) {
            this.itemId = itemId;
            this.name = name;
            this.quantity = qty;
            this.price = price;
            this.type = type;
            this.categoryId = categoryId;
            this.productId = productId;
        }

        // Properties
        public int Quantity {
            get { return quantity; }
            set { quantity = value; }
        }

        public decimal Subtotal {
            get { return (decimal)(this.quantity * this.price); }
        }

        public string ItemId {
            get { return itemId; }
        }

        public string Name {
            get { return name; }
        }

        public string Type {
            get {
                return type;
            }
        }
        public decimal Price {
            get { return price; }
        }

        public string CategoryId {
            get {
                return categoryId;
            }
        }
        public string ProductId {
            get {
                return productId;
            }
        }
    }
}

我是想把这里的属性换成索引取值的方法,这样不知道会引响多大的速度呀和效率呀,同时如果用索引器的话,是不是还要事先去NEW一个呢 --------------------编程问答-------------------- 1、用Hashtable没有什么行不通的
[SerializableAttribute] 
public class CartItemInfo: Hashtable{
    public CartItemInfo(string itemId, string name, int qty, decimal price, string   type, string categoryId, string productId) {
     ....
    }
}
2、性能的影响你循环几千次就可以看出区别了。
3、原来的CartItemInfo个人觉得没什么不好,如果每个类需要索引取值的方法你可以加一个方法,而不是全部替换掉(你可以写个基类继承下这样修改起来方便点)。如果不是每个类都需要
我觉得写个静态方法就可以了。
========================
仅供参考
--------------------编程问答--------------------
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,