S
sklett
I'm revisiting an old series of overloaded methods I have and I would like
to convert them to a single generic method. Here is the method in it's
current, overloaded implementation:
<code>
public StringCustomFieldRef GetStringField(string fieldID, CustomRecord
record)
{
if(record.customFieldList == null)
{
return null;
}
foreach(CustomFieldRef fieldRef in record.customFieldList)
{
if(fieldRef is StringCustomFieldRef &&
((StringCustomFieldRef)fieldRef).internalId == fieldID)
{
return fieldRef as StringCustomFieldRef;
}
}
return null;
}
</code>
I then tried to change it like so:
<code>
public TFieldType GetStringField<TFieldType>(string fieldID, CustomRecord
record)
{
if (record.customFieldList == null)
{
return default(TFieldType);
}
foreach (CustomFieldRef fieldRef in record.customFieldList)
{
if (fieldRef is TFieldType && ((TFieldType)fieldRef).internalId ==
fieldID)
{
return (TFieldType)fieldRef;
}
}
return default(TFieldType);
}
</code>
The above code throws to compiler errors that have me stumped:
"Cannot convert type 'PMDOutAddin.com.netsuite.webservices.CustomFieldRef'
to 'TFieldType'"
It could be that what I'm trying to do isn't possible, like I said, I'm very
new to generics. I've seen generic classes before that have something like
" : where ClassName" after them, it looks like it's a base class of
interface requirement. Maybe something like this on a method would be
needed?
Any suggestions welcome.
Thanks for reading,
Steve
to convert them to a single generic method. Here is the method in it's
current, overloaded implementation:
<code>
public StringCustomFieldRef GetStringField(string fieldID, CustomRecord
record)
{
if(record.customFieldList == null)
{
return null;
}
foreach(CustomFieldRef fieldRef in record.customFieldList)
{
if(fieldRef is StringCustomFieldRef &&
((StringCustomFieldRef)fieldRef).internalId == fieldID)
{
return fieldRef as StringCustomFieldRef;
}
}
return null;
}
</code>
I then tried to change it like so:
<code>
public TFieldType GetStringField<TFieldType>(string fieldID, CustomRecord
record)
{
if (record.customFieldList == null)
{
return default(TFieldType);
}
foreach (CustomFieldRef fieldRef in record.customFieldList)
{
if (fieldRef is TFieldType && ((TFieldType)fieldRef).internalId ==
fieldID)
{
return (TFieldType)fieldRef;
}
}
return default(TFieldType);
}
</code>
The above code throws to compiler errors that have me stumped:
"Cannot convert type 'PMDOutAddin.com.netsuite.webservices.CustomFieldRef'
to 'TFieldType'"
It could be that what I'm trying to do isn't possible, like I said, I'm very
new to generics. I've seen generic classes before that have something like
" : where ClassName" after them, it looks like it's a base class of
interface requirement. Maybe something like this on a method would be
needed?
Any suggestions welcome.
Thanks for reading,
Steve