I want to make a generic class that accepts only serializable classes, can it be done with the where constraint?
The concept I'm looking for is this:
public class MyClass<T> where T : //[is serializable/has the serializable attribute]
I want to make a generic class that accepts only serializable classes, can it be done with the where constraint?
The concept I'm looking for is this:
public class MyClass<T> where T : //[is serializable/has the serializable attribute]
Nope, I'm afraid not. The only things you can do with constraints are:
where T : class
- T must be a reference typewhere T : struct
- T must be a non-nullable value typewhere T : SomeClass
- T must be SomeClass or derive from itwhere T : ISomeInterface
- T must be ISomeInterface or implement itwhere T : new()
- T must have a public parameterless constructorVarious combinations are feasible, but not all. Nothing about attributes.
Afraid not. Best you can do is a runtime check on Type.IsSerializable.
What I know; you can not do this. Have you though about adding an 'Initialize' method or something similar?
public void Initialize<T>(T obj)
{
object[] attributes = obj.GetType().GetCustomAttributes(typeof(SerializableAttribute));
if(attributes == null || attributes.Length == 0)
throw new InvalidOperationException("The provided object is not serializable");
}
I haven't tested this code, but I hope that you get my point.
If you are looking for any class that is serializable, I think you are out of luck. If you are looking for objects that you have created, you could create a base class that is serializable and have every class you want to support derive from it.