If you simply want to initialise a member field or property with the constructor parameter, in C# >= 3 you can do it very easier:
public static string GetAllItems<T>(...) where T : InterfaceOrBaseClass, new()
{
...
List<T> tabListItems = new List<T>();
foreach (ListItem listItem in listCollection)
{
tabListItems.Add(new T{ BaseMemberItem = listItem }); // No error, BaseMemberItem owns to InterfaceOrBaseClass.
}
...
}
This is the same thing Garry Shutler said, but I'd like to put an aditional note.
Of course you can use a property trick to do more stuff than just setting a field value.
A property "set()" can trigger any processing needed to setup its related fields and any other need for the object itself, including a check to see if a full initialization is to take place before the object is used, simulating a full contruction (yes, it is an ugly workaround, but it overcomes M$'s new() limitation).
I can't be assure if it is a planned hole or an accidental side effect, but it works.
It is very funny how M$ people adds new features to the language and seems to not do a full side effects analysis.
The entire generic thing is a good evidence of this...