比较两个类型"对象"

时间:2016-11-18 00:06:25

标签: c# object comparison unity5 system.reflection

我有一个相当复杂的问题,我正在努力寻找解决方法。

基本上,因为Unity引擎不支持.NET 4,所以我很难找到使用" dynamic"类型变量的替代方法。

一些背景:我正在制作一款拥有大量可解锁内容的游戏。我们的目标是拥有一本包含所有条件及其相关奖励的大字典(目前我们都硬编码)。然后,每当玩家做出可能导致解锁的事情时,我们想要检查字典中的某些条目以查看它们是否应该被解锁。我们想要这样,所以我们只需要编写一个小循环来检查玩家是否解锁了任何东西,而不是在我们的代码中完成数百个if语句。

问题是,需要检查的特定字段可以在我们的任何脚本中。例如,游戏可能需要检查玩家是否拥有一定数量的物品(在我们的库存脚本中),或者他们是否已经玩过一定级别(在我们的等级词典中)。反思似乎解决了我们的问题,但现在比较运营商正在引起头痛。

供参考,这是我的"条件" class,用于存储哪些字段需要相互比较以解锁特定奖励:

public class Condition
{
    public enum condOper { Greater, Lesser, Equals, NotEquals, GreaterOrEquals, LesserOrEquals};
    public Type Script1;
    public Type Script2;
    public string Property1;
    public string Property2;
    public string Key1;
    public string Key2;
    public condOper condOperator;
}

脚本变量是字段所在的脚本,属性变量是可以使用哪些属性来访问字段,每当我们需要检查字典中的特定条目时使用键变量,最后一个变量是在两个字段之间使用什么比较运算符。

所以这是我的代码我试图用来比较条件中的两个字段:

    //Create two variables for the fields
    object property1 = condition.Script1.GetField(condition.Property1).GetValue(null);
    object property2 = condition.Script2.GetField(condition.Property2).GetValue(null);

    //Do a different conditional check based on the operator
    bool result;
    if (condition.condOperator == Condition.condOper.Greater)
        result = property1 > property2;
    else if(condition.condOperator == Condition.condOper.Lesser)
        result = property1 < property2;
    ...

请注意,我们要查找的所有字段都是静态的,因此&#34; null&#34;在GetValue中。

我得到的错误是操作员(&lt;或&gt;)不能在两个&#34;对象&#34;之间使用。

将它们声明为类型&#34;动态&#34;并且有一些尝试捕获可以工作,但不幸的是Unity不支持.NET 4.静态输入&#34; property1&#34;和&#34; property2&#34;因为并非所有字段都是整数,浮点数等,所以变量不会起作用,因为必须支持多种类型。

那么,TLDR,有没有办法可以使用比较运算符,如&#34;&gt;&#34;或&#34; ==&#34;两个变量类型&#34;对象&#34;?

之间

0 个答案:

没有答案