C# 使用字符串访问结构

标签 c# unity3d

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

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

但这只有在它是 void 而不是结构时才有效。我需要做什么才能使它正常工作?

    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";
       }
 }

最佳答案

虽然这是可能的,但听起来设计欠佳。也许您可以使用一种常见的 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
    }
}

关于C# 使用字符串访问结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23662058/

相关文章:

C# : this() mean after a constructor of struct 是什么

git - Unity 2019 中包的版本控制

android - Unity 生成报告在大小计算中缺少项目

android - 使用 Unity 作为 subview 给了我一个黑屏

c# - 在 Unity 中达到条件时显示和隐藏游戏对象?

c# - Unity 给 child 添加 child ,但在顶部

c# - 不能使用 FileFormatException (?)

c# - 如何在 LDAP 中进行身份验证?

c# - 如何使用 Autofac 注入(inject)泛型工厂

c# - 如何取消 Stream.ReadAsync?