Referring to Classes by String Variable

I’m wondering how I could get a String Variable (CurrentWeapon), to work like a Class reference (not sure how I can explain, as I am quite the noob, as you probably understand) to get different class variables from different classes depending on what weapon I have selected.
The following script is a class where I have stored all the properties and stats for a weapon.

    public class Stats_SMG : MonoBehaviour {
    	public static string Name = "SMG";
    	public static int Damage = 20;
    	public static float FireRate = 0.3f;
    	public static int Magazine = 25;
    	public static int ReserveMagazines = 2;
    }

The following script is how I try to “dynamically” access my weapons stat-classes (assume that I have multiple of the scripts above with different names and properties to differnet weapons, etc)

public class Shooting : MonoBehaviour {

	Stats_SMG smg;
	Stats_AssaultRifle ar;

	public string CurrentWeapon;


	void Start() {
		CurrentWeapon = smg;
		Debug.Log (CurrentWeapon.Damage);
	}

The above is just a quick sample of what I have to (hopefully) explain to you the problem that I have.
Sorry if any sentences or words are misspelled or weird, as English is not my first language.

You should probably use a list and have multiple instances of a basic weapon class(with different settings for different guns). Then search the list for the weapon tag and use the stats from that subscript. Right now you are trying to get Damage from a string the compiler sees a string only as an array of chars not as an identifier. This weapon class of yours should be generic between all weapons.

class Gun
{
   public String name;
   public int    damage;
   public float  fireRate;
   public int    magazine;
   public int    reserveMagazines;

   void SetGun(string n, int d, int rate, int mag_size, int mags)
   {
      name = n;
      damage = d;
      rate = fireRate;
      magazine = mag_size;
      reserveMagazines = mags;
   }
}

If you do this you can set the stats of different guns and then search a list for a gun with the correct name “smg” “ar” “uzi” “pistol” etc.

To use list you will need to add the following line to the includes for your code.

using System.Collections.Generic;

Then make a list by using:

public List<Gun> Guns = new List<Gun>();

To add to this list you can do something like this:

Gun myGun;
myGun.name = "smg";  //or whatever name you want to use
myGun.damage = 20;   //or whatever damage you get the idea
..... etc ......

Guns.Add(myGun);

To find the gun in the list use this:

Gun FindGun(string myName)
{
   if(Guns.Count == 0)
   {
      debug.log("There are no guns in the list!");
      return null;  //this may not work I'm not too savy with C# if it works be sure to check that the return value is != null before using 
   }
   for(int i = 0; i < Guns.Count; i++)
   {
      if(Guns_.name == myName)return Guns*;*_

}
debug.log(“Gun not found in list!”);
return null; //like the other return up there check for null before using.
}