나는이 같은 CSV에서 사용자를 읽어 새로운 목록을
var users = Utilities.GetUsersFromCSV(path, userType, course);
이는 CSV 파일을 읽고 그것으로 User
객체를 구축합니다. [사용자가 CSV 파일에서 작성된 후 나는이 같은 데이터베이스에 추가 할
public static List<User> GetUsersFromCSV(string filepath, string userType, Course course) {
var users = new List<User>();
var user = new User();
GeneratePassword(ref user);
return users;
}
private static void GeneratePassword(ref User user) {
var size = Rand.Value.Next(0, 3) + 8;
var sb = new StringBuilder();
var shuffledlist = Chars.OrderBy(a => Guid.NewGuid()).ToList();
for (var i = 0; i < size; i++) {
sb.Append((char) shuffledlist[i]);
}
user.Password = sb.ToString();
}
:
_userRepository.AddUsers(Utilities.HashPasswords(users));
를 호출 한 가능성 관련 부분은 암호의 창조
public static List<User> HashPasswords(List<User> users) {
var newList = new List<User>(users);
foreach (var user in newList) {
user.Password = CalculateSha1Hash(user.Password, user.Login);
}
return newList;
}
this에 따르면 리포지토리에 전송되는 사용자 목록에 해시 된 암호가 포함되어야한다고 대답하고 users
목록에는 m y 컨트롤러에는 원래 비밀번호가 있어야합니다. 그러나 디버깅하는 동안 나는 HashPasswords
도 users
의 암호에 영향을 미칩니다.
이 문제의 원인은 무엇입니까?
참조 유형에 대한 참조 사본이 메소드에 전달되는 것과 동일합니다. 그러나이 참조는 여전히 동일한 데이터를 가리 킵니다. 이것을 피하려면 객체 사본을 만들어이 사본을 전달해야합니다. 이것은 게시 한 링크에도 명시되어 있습니다. '목록 자체를 복사하려면 List에 편리한 생성자가 있으며 이는 IEnumerable 을 사용합니다. '. –
user1567896
코드가 컴파일되지 않습니다. GetUsersFromCSV 메서드는 값을 반환하지 않습니다. – helb
@ user1567896 : 그게 뭔지'var newList = 새 목록 (사용자);'무엇입니까? @helb : 분명히 코드의 큰 부분을 버렸습니다. 모든 것이 컴파일됩니다. 그냥 명확하게 편집하겠습니다. –