Уникальные идентификаторы для полей/свойств

Я хотел бы сделать приложение для обсчета химических параметров веществ (и их смесей), и у меня есть вот такая структура для индивидуального компонента:

struct Component
{
    string Name { get; }
    double MoleFraction { get; set; }
    ...
}

И есть класс уравнения, которое использует какой-то набор параметров. У каждого компонента эти параметры есть (они берутся из базы данных).

class Equation 
{
    private Dictionary<Component, double> omega;
    private Dictionary<Component, Pressure> Pc;
    private Dictionary<Component, Temperature> Tc;
}

Можно ли как-то по другому реализовать привязку параметра к компоненту, кроме как через Dictionary? Хотелось бы примерно такого же поведения, как у ключа в SQL, чтобы он также еще и не мог повторяться. Как-то так я бы хотел, чтобы можно было получать значения этих параметров:

Console.WriteLine(
    omega("Methane"));
Console.WriteLine(
    Pc("Hydrogen")); 

Я просто до этого работал с Aspen Custom Modeler (там в качестве языка используется своя модификация VisualBasic), там можно указывать, по каким параметрам можно получить доступ к значению

Component As StringSet (["Hydrogen", "Methane"]);    // тут указываем, какие будут идентификаторы компонентов
Phase As StringSet (["Vapor", "Liquid"]);            // тут указываем, какие будут идентификаторы фазы компонента (пар, жидкость)
Omega(Component, Phase) As RealVariable;             // объявляем переменную

// И вот таким образом ее можно использовать
Omega("Hydrogen", "Vapor") = 100;
Omega("Methane", "Liquid") = Omega("Hydrogen", "Vapor") * 10;

Ответы (0 шт):