Уникальные идентификаторы для полей/свойств
Я хотел бы сделать приложение для обсчета химических параметров веществ (и их смесей), и у меня есть вот такая структура для индивидуального компонента:
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;