I have an object (form) which contains a collection (.Fields) which I want to contain instances of a generic class (FormField).
The FormField, simply, is defined as such:
public class FormField<T>
{
private Form Form;
public T Value { get; set; }
public string Name { get; set; }
public void Process()
{
// do something
}
public FormField(Form form, string name, T value)
{
this.Name = name;
this.Value = value;
this.Form = form;
}
}
This allows me to have FormField, FormField etc. and that part works great.
What I want is a collection of “Formfields” regardless of the type, but I am forced into defining a type (it seems) such as:
public class Form
{
string Code { get; set; }
string Title { get; set; }
int Year { get; set; }
Guid ClientID { get; set; }
ICollection<FormField<int>> Fields { get; set; }
}
What, I think, I want is an interface that allows me to abstract the type information and thus type the collection as instances of (for exxample) IFormField not FormField<>
But I can’t see how to define this without strongly typing the collection in the interface…
Any help (including any alternative solutions!) would be greatly appreciated!
Thanks, Ben
Create a non-generic interface or base class, which probably includes everything
FormFielddoes except the type-specific bits. Then you can have anICollection<IFormField>. Obviously you won’t be able to use this in a strongly-typed way, in terms of the type of field being used – but you can use all the non-type-specific bits of it (e.g. the name and the form).