Вы можете либо создать свою собственную структуру, содержащую два словаря, либо просто использовать кортеж для них обоих.
Затем вы можете использовать Lazy для инициализации их обоих следующим образом:
public sealed class Test
{
public Test()
{
_dicts = new Lazy<(Dictionary<string, string> m1, Dictionary<string, string> m2)>(initDicts);
}
public void DoSomething()
{
_dicts.Value.m1.Add("key", "value");
_dicts.Value.m2.Add("key", "value");
}
(Dictionary<string, string> m1, Dictionary<string, string> m2) initDicts()
{
return (new Dictionary<string, string>(), new Dictionary<string, string>());
}
readonly Lazy<(Dictionary<string, string> m1, Dictionary<string, string> m2)> _dicts;
}
Это будет немного более читаемым, если вы определите вложенную структуру для хранения ваших словарей:
public sealed class Test
{
public Test()
{
_dicts = new Lazy<Dicts>(initDicts);
}
public void DoSomething()
{
_dicts.Value.M1.Add("key", "value");
_dicts.Value.M2.Add("key", "value");
}
Dicts initDicts()
{
return new Dicts(
new Dictionary<string, string>(),
new Dictionary<string, string>());
}
readonly struct Dicts
{
public Dicts(Dictionary<string, string> m1, Dictionary<string, string> m2)
{
M1 = m1;
M2 = m2;
}
public readonly Dictionary<string, string> M1;
public readonly Dictionary<string, string> M2;
}
readonly Lazy<Dicts> _dicts;
}