Вам нужно будет сначала инициализировать словарь в конструкторе пользовательского класса. Используйте private set
, чтобы предотвратить повторную инициализацию словаря.
# User.cs
namespace LDIFMod
{
public class User
{
User()
{
UserDict = new Dictionary<string, string>()
}
public string UserHash { get; set; }
public string UserID { get; set; }
public Dictionary<string, string> UserDict { get; private set; }
}
}
Ваш код звонка становится
var query = from line in File.ReadAllLines(args[0])
let UserRecord = line.Split(',')
select new User()
{
UserHash = UserRecord[2].Trim() +UserRecord[3].Trim(),
UserID = UserRecord[4].Trim(),
UserDict.Add(UserRecord[5],UserRecord[9]);
}
Возвращает один словарь на строку запроса. если вы хотите, чтобы все строки разделяли словарь, вам нужно сделать его статическим или не хранить его внутри User
. Если вы сделаете это, имейте в виду, что linq является отложенным выполнением, поэтому словарь не будет заполнен полностью, пока вы полностью не перечислите запрос.
Я подумал, что приведу пример того, как это сделать со всеми из них в одном словаре.
# User.cs
namespace LDIFMod
{
public class User
{
public string UserHash { get; set; }
public string UserID { get; set; }
public readonly string[] SourceData {get; private set;}
}
}
и вот запрос
var query = from line in File.ReadAllLines(args[0])
let UserRecord = line.Split(',')
select new User()
{
UserHash = UserRecord[2].Trim() + UserRecord[3].Trim(),
UserID = UserRecord[4].Trim(),
SourceData = UserRecord;
}
var UserLookp = query.ToDictionary((user) => user.SourceData[5], (user) => user.SourceData[9]);
Это чисто из памяти без возможности проверки на наличие ошибок, поэтому могут быть некоторые ошибки.