我有一个类,我想在创建时强制执行一些通用约束
我的对象.cs
public class MyObject<T> where T : ObjectBase, new()
{
public MyObject()
{
}
public bool Validate(out ServiceError? message)
{
// validation
}
}
对象库
public abstract class ObjectBase
{
public abstract bool Validate(out ServiceError? message);
}
我想知道是否有任何方法可以避免每次我有这样的函数时都必须为 T 放置通用约束:
ObjectRepo.cs
public void Put<T>(MyObject<T> obj)
where T : ObjectBase, new()
{
// code
}
如果在 MyObject 类中指定了 T 的约束,是否有理由每次使用 MyObject 作为参数时都必须重新指定?
最佳答案
如果类中有 T,请不要在方法中重新定义 T
public class MyObject<T> where T : ObjectBase, new()
{
//public void Put<T>(MyObject<T> obj)//doesn't work
public void Put(MyObject<T> obj)//works
{
// code
}
}
更新
如果 Put 在另一个类中,你最好的解决方案是重构你的代码并将所有与 T 相关的方法移动到同一个类中(并在类上添加约束)
更新 2
如果更新 1 不可能,可能值得检查一下是否可以用 ObjectBase 或其他基类替换 T
关于c# - 通用约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43283398/