Dynamic reference of a Class variable

I’ve constructed several weapon data classes like so:

public class Cleaver
	{
	public string WeaponName = "Cleaver";
	public string WeaponType = "Melee";
	public int WeaponRange = 0;
	public int WeaponDamage = 25;
	public float WeaponRefire = 2.0f;
	public int WeaponReload = 0;
	public float WeaponReloadTime = 0.0f;	
	}

I’d like to reference some of these variables in another class / script, which I’d normally do via dot notation (Cleaver.WeaponName).

However, if I wanted to reference .WeaponName because the weapon is not constant, how would I pass in a string variable to the call to dynamically get the appropriate Class’s variable?

<----------Edit----------->

Base on Syclamoth’s answer below I’ve edited my script:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class WeaponItem
	{
    public string WeaponName = "Name";
    public string WeaponType = "Type";
    public int WeaponRange = 10;
    public int WeaponDamage = 10;
    public float WeaponRefire = 0.5f;
    public int WeaponReload = 0.5f;
    public float WeaponReloadTime = 0.1f;
	}

public class WeaponManager : MonoBehaviour
{
	private PlayerManager PlayerManager;
	public WeaponItem Cleaver;
	public WeaponItem SCAR;
	public WeaponItem Weapon3;
		
	Cleaver.WeaponName = "Cleaver";
	Cleaver.WeaponType = "Melee";
	Cleaver.WeaponRange = 0;
	Cleaver.WeaponDamage = 25;
	Cleaver.WeaponRefire = 2.0f;
	Cleaver.WeaponReload = 0;
	Cleaver.WeaponReloadTime = 0.0f;	
	
	SCAR.WeaponName = "SCAR";
	SCAR.WeaponType = "Ranged";
	SCAR.WeaponRange = 50;
	SCAR.WeaponDamage = 10;
	SCAR.WeaponRefire = 0.2f;
	SCAR.WeaponReload = 16;
	SCAR.WeaponReloadTime = 4.0f;	
	
	Weapon3.WeaponName = "Weapon3";
	Weapon3.WeaponType = "Ranged";
	Weapon3.WeaponRange = 50;
	Weapon3.WeaponDamage = 10;
	Weapon3.WeaponRefire = 0.2f;
	Weapon3.WeaponReload = 16;
	Weapon3.WeaponReloadTime = 4.0f;
	
	void Start()
	{
		PlayerManager = gameObject.GetComponentInChildren<PlayerManager> ();	
	}
}

I’m getting a compile error when I try to define the Cleaver’s properties:

“error CS1519: Unexpected symbol `=’ in class, struct, or interface member declaration”

Which I don’t really understand - is it complaining that Cleaver doesn’t exist yet, so it’s assuming I’m attempting to create it?

It looks like you are mixing up static classes and instances.

If you have a class ‘Weapon’-

public class Weapon
{
    public string WeaponName = "Cleaver";
    public string WeaponType = "Melee";
    public int WeaponRange = 0;
    public int WeaponDamage = 25;
    public float WeaponRefire = 2.0f;
    public int WeaponReload = 0;
    public float WeaponReloadTime = 0.0f;  
}

Then you can then use

public Weapon cleaver;
public Weapon woodenSpoon;
public Weapon bowl;

Then, use

cleaver.WeaponName = "Cleaver";
woodenSpoon.WeaponName = "Wooden Spoon";

And so on. Importantly, the fact that the different weapons have different names doesn’t change the name of the variable in the class. So, if you have

Weapon currentWeapon = cleaver;

// Prints "Cleaver"
Debug.Log(currentWeapon.WeaponName);

currentWeapon = woodenSpoon;

// This time prints "Wooden Spoon", despite being the exact same line!
Debug.Log(currentWeapon.WeaponName);

You get a different result depending on which weapon is the ‘currentWeapon’.