patterncsharpMinor
Minimize code in c#
Viewed 0 times
codeminimizestackoverflow
Problem
var newObject = keyValuePair.Key;
var originalObject = keyValuePair.Value;
List bitValues = new List();
foreach (var item in originalObject.ChargeBITValues)
{
ChargeBITValue bitValue = new ChargeBITValue()
{
ChargeTypeEnumID = item.ChargeTypeEnumID,
DataValue = item.DataValue,
ClientTripTypeContractChargeValueList = newObject
};
bitValues.Add(bitValue);
}I have similar loops for rest of the values, bitValues, moneyValues, Rupees Values, how can I remove the duplication from my code?
Solution
First, if you don't have it already, you need to define a common Interface that is implemented by
Then, you change your method to use generics and type constraints:
If you want to, you can use LINQ instead of the foreach statement:
ChargeBITValue, ChargeMoneyValue, ChargeRupeeValue etc (you need to adapt the interface using the actual types of your properties instead of int, List and IEnumerable). Let' call it IChargeValue:interface IChargeValue
{
int ChargeTypeEnumID { get; set; }
int DataValue { get; set; }
List ClientTripTypeContractChargeValueList { get; set; }
IEnumerable ChargeValues { get; }
}Then, you change your method to use generics and type constraints:
private void YourMethod() where T : IChargeValue, new()
{
// KeyValuePair keyValuePair = new ...
var newObject = keyValuePair.Key;
var originalObject = keyValuePair.Value;
List values = new List();
foreach (var item in originalObject.ChargeValues)
{
T value = new T()
{
ChargeTypeEnumID = item.ChargeTypeEnumID,
DataValue = item.DataValue,
ClientTripTypeContractChargeValueList = newObject
};
values.Add(value);
}
}If you want to, you can use LINQ instead of the foreach statement:
var values =
from item in originalObject.ChargeValues
select new T
{
ChargeTypeEnumID = item.ChargeTypeEnumID,
DataValue = item.DataValue,
ClientTripTypeContractChargeValueList = newObject
};
List valuesAsList = values.ToList();Code Snippets
interface IChargeValue
{
int ChargeTypeEnumID { get; set; }
int DataValue { get; set; }
List<string> ClientTripTypeContractChargeValueList { get; set; }
IEnumerable<IChargeValue> ChargeValues { get; }
}private void YourMethod<T>() where T : IChargeValue, new()
{
// KeyValuePair<YourTKey, YourTValue> keyValuePair = new ...
var newObject = keyValuePair.Key;
var originalObject = keyValuePair.Value;
List<T> values = new List<T>();
foreach (var item in originalObject.ChargeValues)
{
T value = new T()
{
ChargeTypeEnumID = item.ChargeTypeEnumID,
DataValue = item.DataValue,
ClientTripTypeContractChargeValueList = newObject
};
values.Add(value);
}
}var values =
from item in originalObject.ChargeValues
select new T
{
ChargeTypeEnumID = item.ChargeTypeEnumID,
DataValue = item.DataValue,
ClientTripTypeContractChargeValueList = newObject
};
List<T> valuesAsList = values.ToList();Context
StackExchange Code Review Q#7154, answer score: 6
Revisions (0)
No revisions yet.