C#使用String访问Struct

时间:2014-05-14 18:12:17

标签: c# unity3d

我的游戏有点困难。我有一个名为Upgradebuttons的类。从这个类我想从另一个类访问存储在结构中的一些变量。我可以通过键入classname.structname.preferedvar轻松访问变量,但structname取决于所单击的升级。所以我想用字符串调用sruct。我试过了:

       MethodInfo method = typeof(Classname).GetMethod(structname);

但这只有在无效而不是结果的情况下才有效。为了让这个工作,我需要做什么?

    public class UpgradeButtons : MonoBehaviour {

       public void somefunction{
          // here i want to have access

      }

 }

这是我想要访问的类的示例:

    public class Upgrades: MonoBehaviour {
        public struct Upgrade1{
            public const int Cost = 10;
            public const float Value = 0.1f;
            public static string Naam = "Autoclicker";
       }
 }

3 个答案:

答案 0 :(得分:4)

虽然这是可能的,但听起来很糟糕。也许您可以使用一个公共struct Upgrade并使用Name属性在运行时找到它?

示例:

public struct Upgrade
{
    public string Name;
    public int Cost;
    public float Value;

    public Upgrade(string name, int cost, float value)
    {
        this.Name = name;
        this.Cost = cost;
        this.Value = value;
    }
}

public class UpgradeButtons : MonoBehavior
{
    List<Upgrade> Upgrades = new List<Upgrade>();

    public void CreateButtons()
    {
        Upgrades.Add(new Upgrade("Autoclicker", 10, 0.1f));
        //etc...
    }

    public void somefunction()
    {
        Upgrade autoclickUpgrade = Upgrades.Where(p => p.Name == "Autoclicker").FirstOrDefault();

        if(autoclickUpgrade == null)
            throw new Exception("Could not find Autoclicker upgrade.");

        //do something with autoclickUpgrade
    }
}

答案 1 :(得分:1)

string Naam中删除静态:

 public class Upgrades: MonoBehaviour {
        public struct Upgrade1{
            public const int Cost = 10;
            public const float Value = 0.1f;
            public string Naam = "Autoclicker";
       }

 }

当一个对象(类,变量,方法)定义为static时,它不能通过实例引用。

答案 2 :(得分:1)

如果我理解你的问题,你可能正走在正确的轨道上。由于您的加载项所依赖的结构(类型)可能存在,也可能不存在,因此反射是最好的方法。

尝试使用Assembly.GetType()或相关方法来尝试加载类型,检查其存在并迭代其成员。

http://msdn.microsoft.com/en-us/library/y0cd10tb(v=vs.110).aspx