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 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛