2015-01-15 47 views
1

基本问题在这里,但我是新来的C#。我有代码基本上说:如果条件A,然后执行属性X上的代码块。如果条件B,然后在属性Y上执行相同的代码块,依此类推。而不是必须重复我的代码块只是为了更改一个单一的属性名称 - a.Value.ValueX为a.Value.ValueY - 是否有方法将ValueX或ValueY作为变量调用,如a.Value。{$ propertyName} ?动态获取keyvaluepair值

public static class Conditions 
{ 
    public static bool A { get; set; } 
    public static bool B { get; set; } 
} 

public class MyObjects 
{ 
    public int ValueX { get; set; } 
    public int ValueY { get; set; } 
} 

public class MyCollection 
{ 
    public Dictionary<int, MyObjects> listOfObjects = new Dictionary<int, MyObjects>(); 

    public static void DoConditions() 
    { 
     foreach(var a in listOfObjects) 
     { 
      if(Conditions.A) 
      { 
       // do code using value x 
       if (a.Value.ValueX > 0) 
        continue; 
      } 
      else if(Conditions.B) 
      { 
       // do the exact same code using value Y 
       if (a.Value.ValueY > 0) 
        continue; 
      } 
     } 
    } 
} 
+0

难道你们就不能只是提取公共代码的方法,你使用'a.Value.ValueX'和'a.Value.ValueY'调用? – 2015-01-15 15:48:49

+0

否,因为重复执行的代码正在循环通过嵌套字典的第二级,这会使其无用。我最终还是会复制大量的代码。 – phpmeh 2015-01-15 15:52:33

+1

这并不完全清楚你的意思。让你的例子代表真正的问题将在这里有所帮助。 – 2015-01-15 15:53:07

回答

1

你可以这样做:

int val = 0; 
if(Conditions.A) 
    val = a.Value.ValueX; 
else if(Conditions.B) 
    val = a.Value.ValueY; 

// Your code block here using "val". 
1

创建一个变量,并与相应的属性值来填充它:

foreach(var a in listOfObjects) 
{ 
    int value; 
    if(Conditions.A) 
     value = a.Value.ValueX; 
    else 
     value = a.Value.ValueY; 

    if(value > 0) 
     continue; 
    //other code using `value` 
}