Это означает, что вы разыгрываете (что может быть дорогостоящим) переменную customField
несколько раз, и вам будет лучше, разыгрывая только один раз.
Вы можете использовать Оператор as
для этого, поскольку оператор as
выполняет приведение и возвращает экземпляр нужного типа, или NULL, если объект не может быть приведен к нужному типу.
Likethis:
DateCustomFieldRef customField = customFields[f] as DateCustomFieldRef; // the as operator returns null if the casting did not succeed (that is, customFields[f] is not a DatecustomFieldRef instance
if (customField != null)
{
DateCustomFieldRef dateField = customField;
if (dateField.internalId != null && dateField.internalId == "created_date")
{
createdDate = dateField.value.ToString();
}
}
else
{
var stringField = customFields[f] as StringCustomFieldRef;
if (stringField != null )
{
StringCustomFieldRef tradingNameField = stringField;
if (businessNameField.internalId != null && businessNameField.internalId == "business_name")
{
businessName = businessNameField.value;
}
}
}
Но я полагаю, что, возможно, существует даже лучшее решение (хотя я не знаю ни ваш проект, ни ваш код), но не удастся ли абстрагировать некоторые вещи?
Возможно, у вас есть CustomField
базовый класс, а DateCustomFieldRef
и StringCustomFieldRef
наследуются от этого Customfield
базового класса.Если это так, вы можете создать виртуальный (или, возможно, даже абстрактный) метод в базовом классе CustomField
, который переопределяется в каждом дочернем классе, который фактически возвращает значение этого поля.
Например:
public class CustomField<T>
{
public string Internalid
{
get;
set;
}
public T Value
{
get;
set;
}
public virtual string GetStringRepresentation()
{
return Value.ToString();
}
}
public class DateCustomField : CustomField<DateTime>
{
public override string GetStringRepresentation()
{
return Value.ToShortDateString();
}
}
Ваш код может выглядеть намного проще:
foreach( CustomField f in customFields )
{
if( f.InternalId == "created_date" )
{
createdDate = f.GetStringRepresentation();
}
if( f.InternalId == "business_name" )
{
businessName = f.GetStringRepresentation();
}
}
(Код выше можно сделать более простым и чистым, но вы получите смещение.)