richard_1015 2013-10-09 06:34 采纳率: 0%
浏览 837

各位大神们帮帮忙C#反射

namespace SimpleRuleEngine
{
public class AdvanceActivity :Activity
{

    protected Role PreConditionRole = null;

    [XmlAttribute(DataType = "string", AttributeName = "PreConditionRoleId")]
    public String PreConditionRoleId
    {
        get;
        set;
    }

    public override void prepare(List<Role> roles)
    {
        foreach (Role role in roles)
        {
            if (role.RoleId.CompareTo(this.ConditionRoleId) == 0)
            {
                this.conditionRole = role;
                continue;
            }
            else if(role.RoleId.CompareTo(this.PreConditionRoleId)==0)
            {
                this.PreConditionRole = role;
                continue;
            }
        }


        if (conditionRole == null || PreConditionRole ==null)
        {
            throw new ArgumentException();
        }
    }
}

public class SnackApptizerCommissionActivity :AdvanceActivity
{

    public override void excute(SellData[] dataIn, CommissionData dataOut)
    {
        Dictionary<SellData, bool> preConditionRes = new Dictionary<SellData, bool>();
        for (int i = 0; i < dataIn.Length; i++)
        {
            List<ChosenDish> chosenDishes = dataIn[i].ChosenDish;
            for (int j = 0; j < chosenDishes.Count; j++)
            {
                if (PreConditionRole.check(chosenDishes[j].DishUnitId))
                {
                    preConditionRes.Add(dataIn[i], true);
                    break;
                }
                else if (j == chosenDishes.Count - 1)
                {
                    preConditionRes.Add(dataIn[i], false);
                    break;
                }
            }
        }

        foreach (SellData data in preConditionRes.Keys)
        {
            if (preConditionRes[data])
            {
                for (int z = 0; z < data.ChosenDish.Count; z++)
                {

                    if (conditionRole.check(data.ChosenDish[z].DishUnitId))
                    {
                        float commission = getCommission(data.ChosenDish[z]);
                        dataOut.CommissionChosenDish.Add(data.ChosenDish[z], new Commission(ActivytiName, commission));
                    }
                }
            }
        }
    }

}

public class WineCommissionActivity : AdvanceActivity
{

    [XmlAttribute(DataType = "float", AttributeName = "IncrasePrecent")]
    public float IncrasePrecent
    {
        get;
        set;
    }

    public override void excute(SellData[] dataIn, CommissionData dataOut)
    {
        Dictionary<SellData, bool> preConditionRes = new Dictionary<SellData, bool>();
        for (int i = 0; i < dataIn.Length; i++)
        {
            List<ChosenDish> chosenDishes = dataIn[i].ChosenDish;
            for (int j = 0; j < chosenDishes.Count; j++)
            {
                if (PreConditionRole.check(chosenDishes[j].DishUnitId))
                {
                    preConditionRes.Add(dataIn[i], true);
                    break;
                }
                else if( j== chosenDishes.Count -1 )
                {
                    preConditionRes.Add(dataIn[i], false);
                    break;
                }
            }
        }

        foreach (SellData data in preConditionRes.Keys)
        {
            if (preConditionRes[data])
            {
                for (int z = 0; z < data.ChosenDish.Count; z++)
                {
                    if (conditionRole.check(data.ChosenDish[z].DishUnitId))
                    {
                        float commission = getWineCommission(data.ChosenDish[z], true);
                        dataOut.CommissionChosenDish.Add(data.ChosenDish[z], new Commission(ActivytiName, commission));
                    }
                }
            }
            else
            {
                for (int z = 0; z < data.ChosenDish.Count; z++)
                {

                    if (conditionRole.check(data.ChosenDish[z].DishUnitId))
                    {
                        float commission = getWineCommission(data.ChosenDish[z], false);
                        dataOut.CommissionChosenDish.Add(data.ChosenDish[z], new Commission(ActivytiName, commission));
                    }
                }
            }
        }
    }

    private float getWineCommission(ChosenDish chosenDish,bool preCondition)
    {
        if (conditionRole.getCommissionType(chosenDish.DishUnitId) == LogicType.absolute)
        {
            return conditionRole.getCommissionValue(chosenDish.DishUnitId);
        }
        else
        {
            if(preCondition)
               return chosenDish.Price * (conditionRole.getCommissionValue(chosenDish.DishUnitId) + IncrasePrecent);
            else
               return chosenDish.Price * conditionRole.getCommissionValue(chosenDish.DishUnitId);
        }
    }
}

如何取得AdvanceActivityWineCommissionActivity,SnackApptizerCommissionActivity这三个值????

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-02-25 18:54
    关注

    该回答引用ChatGPT

    您可以使用C#反射来获取这些值。以下是一个例子:

    // 获取程序集中所有的 AdvanceActivity 子类类型
    var advanceActivityTypes = Assembly.GetExecutingAssembly().GetTypes()
        .Where(t => t.IsSubclassOf(typeof(AdvanceActivity)));
    
    // 遍历每个类型,输出类型名
    foreach (var type in advanceActivityTypes)
    {
        Console.WriteLine(type.Name);
    }
    

    输出:

    SnackApptizerCommissionActivity
    WineCommissionActivity
    

    注意,此代码假定这些类型定义在当前程序集中。如果类型定义在不同的程序集中,则您需要使用不同的反射方法来获取它们。

    评论

报告相同问题?

悬赏问题

  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思