2010-12-21 63 views
0

嗨,还有一个简单的问题。c#scope/typing/assignment question

我想创建一个变量对象,以便取决于某些东西的值,它会根据需要进行转换。例如

var rule; 
switch (seqRuleObj.RuleType) { 
       case SeqRuleObj.type.Pre : 
        rule = new preConditionRuleType(); 
        rule = (preConditionRuleType)seqRuleObj.Rule; 
        break; 
       case SeqRuleObj.type.Post : 
        rule = new postConditionRuleType(); 
        rule = (postConditionRuleType)seqRuleObj.Rule; 
        break; 
       case SeqRuleObj.type.Exit : 
        rule = new exitConditionRuleType(); 
        rule = (exitConditionRuleType)seqRuleObj.Rule; 
        break; 
       default : 
        break; 
      } 
      String result; 
      foreach (sequencingRuleTypeRuleConditionsRuleCondition cond in rule.ruleConditions.ruleCondition) { 

     ....../ blah 
} 

所以基本上这是行不通的。因为名称已经定义,c#将不允许我在每种情况下创建一个新对象。

我可以将foreach循环粘贴到每个案例中,但这对我来说太浪费了,因为对象除了名字之外完全一样。

+0

欢迎来到Stackoverflow!据我所知,这个问题与动态对象无关。这是范围/打字/分配问题。请适当修改 - 一个正确的题目会让更多的人看到它。 – Greg 2010-12-21 15:41:14

+0

好的没问题greg,谢谢。 – Shannow 2010-12-22 09:49:36

回答

2

这些类型是从一个普通类继承还是实现一个通用接口?如果是这样,则代替使用var rule,声明rule是基本类型/接口。

如果它们没有共同的类/接口,并且您可以控制这些类型,则为它们创建一个基类/接口。