关于动态取变量名的值
我有变量名: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#