patterncsharpMinor
comparing objects; optimize code short of using reflection
Viewed 0 times
reflectioncomparingobjectsshortoptimizeusingcode
Problem
I'm comparing two distinct instances and if they are not the same I save to the dB, so I've given snippet of code below of the way I am comparing these instances, I realize I could use reflection and generalize but short of using reflections is there any other way I could optimize the code or make it neater?
```
public class QuestionModel
{
private string _selectedId = string.Empty;
public string SelectedId
{
get { return _selectedId; } set { _selectedId = value; }
}
private List _userResponse;
public List UserResponses
{
get { return _userResponse ?? (_userResponse = new List()); }
set { _userResponse = value; }
}
}
public class UserResponseModel
{
public string QuestionId { get; set; }
public string QuestionText { get; set; }
public bool IsChecked { get; set; }
public int? Value { get; set; }
public string TextValue { get; set; }
public Byte[] Content { get; set; }
public string FilePath { get; set; }
public int? Points { get; set; }
public int? InputType { get; set; }
public bool? IsCheckedRadioButton1 { get; set; }
public bool? IsCheckedRadioButton2 { get; set; }
public bool? IsCheckedRadioButton3 { get; set; }
public bool? IsCheckedRadioButton4 { get; set; }
public bool? IsCheckedRadioButton5 { get; set; }
public bool IsCheckedCheckbox1 { get; set; }
public bool IsCheckedCheckbox2 { get; set; }
private string _selectedId = string.Empty;
public string SelectedId
{
get { return _selectedId; }
set { _selectedId = value; }
}
}
//snippet of code that compares instances of QuestionModel
QuestionModel questionModelInDb = null;
if (existingResponsesInDb.Any())
questionModelInDb = UtilityFunctions.MapResponsestoUserResponses(existingResponsesInDb);
if (questionModelInDb == null) return false;
var isSame = questionModelInDb.SelectedId
```
public class QuestionModel
{
private string _selectedId = string.Empty;
public string SelectedId
{
get { return _selectedId; } set { _selectedId = value; }
}
private List _userResponse;
public List UserResponses
{
get { return _userResponse ?? (_userResponse = new List()); }
set { _userResponse = value; }
}
}
public class UserResponseModel
{
public string QuestionId { get; set; }
public string QuestionText { get; set; }
public bool IsChecked { get; set; }
public int? Value { get; set; }
public string TextValue { get; set; }
public Byte[] Content { get; set; }
public string FilePath { get; set; }
public int? Points { get; set; }
public int? InputType { get; set; }
public bool? IsCheckedRadioButton1 { get; set; }
public bool? IsCheckedRadioButton2 { get; set; }
public bool? IsCheckedRadioButton3 { get; set; }
public bool? IsCheckedRadioButton4 { get; set; }
public bool? IsCheckedRadioButton5 { get; set; }
public bool IsCheckedCheckbox1 { get; set; }
public bool IsCheckedCheckbox2 { get; set; }
private string _selectedId = string.Empty;
public string SelectedId
{
get { return _selectedId; }
set { _selectedId = value; }
}
}
//snippet of code that compares instances of QuestionModel
QuestionModel questionModelInDb = null;
if (existingResponsesInDb.Any())
questionModelInDb = UtilityFunctions.MapResponsestoUserResponses(existingResponsesInDb);
if (questionModelInDb == null) return false;
var isSame = questionModelInDb.SelectedId
Solution
If you want to compare two
Lists, you can use Enumerable.SequenceEqualpublic class UserResponseModelComparer : IEqualityComparer {
public bool Equals(UserResponseModel userResponse1, UserResponseModel userResponse2) {
//... compare the two responses
}
public int GetHashCode(UserResponseModel userResponse) {
// .. calculate hash code...
// see guidelines here:
// http://stackoverflow.com/questions/462451/gethashcode-guidelines-in-c-sharp
}
}
return Enumerable.SequenceEqual(questionModel.UserResponses,
questionModelInDb.UserResponses,
new UserResponseModelComparer());Code Snippets
public class UserResponseModelComparer : IEqualityComparer<UserResponseModel> {
public bool Equals(UserResponseModel userResponse1, UserResponseModel userResponse2) {
//... compare the two responses
}
public int GetHashCode(UserResponseModel userResponse) {
// .. calculate hash code...
// see guidelines here:
// http://stackoverflow.com/questions/462451/gethashcode-guidelines-in-c-sharp
}
}
return Enumerable.SequenceEqual(questionModel.UserResponses,
questionModelInDb.UserResponses,
new UserResponseModelComparer());Context
StackExchange Code Review Q#43577, answer score: 4
Revisions (0)
No revisions yet.