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
    

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

    评论

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作