Friday, 17 June 2016

Multiple if else statement - short by reflection

No comments
Multiple if-else statement

bool chkStatus = true;
            if (DetailsData != null)
            {
                if (DetailsData.Approved != null)
                {
                    if (DetailsData.Approved == false)
                    {
                        chkStatus = false;
                    }
                }
            }
            else
            {
                chkStatus = false;
            }

            if (AspirationData != null)
            {
                if (AspirationData.Approved != null)
                {
                    if (AspirationData.Approved == false)
                    {
                        chkStatus = false;
                    }
                }
            }
            else
            {
                chkStatus = false;
            }


//Short this if else by reflection

 private bool IsWizardApproved<T>(T t)
        {
            if (t == null) return false;
            foreach (PropertyInfo info in t.GetType().GetProperties())
            {
                if (info.Name.ToLower() == "approved")
                {
                    PropertyInfo propertyInfos = t.GetType().GetProperty(info.Name);
                    if (info.GetValue(t, null) != null)
                        return (bool)info.GetValue(t, null);
                }
            }
            return false;

        }

//Call IsWizardApproved for class

   model.Approved = (IsWizardApproved<DetailsData>(detailsData) &&
                && IsWizardApproved<AspirationData>(aspirationData);