C# 一般禁制

C# 一般禁制,c#,generics,C#,Generics,我有一个类,我想在创建时对其强制一些通用约束 Myobject.cs public class MyObject<T> where T : ObjectBase, new() { public MyObject() { } public bool Validate(out ServiceError? message) { // validation

我有一个类,我想在创建时对其强制一些通用约束

Myobject.cs

    public class MyObject<T> where T : ObjectBase, new()
    {
        public MyObject()
        {
        }

        public bool Validate(out ServiceError? message)
        {
            // validation
        }
    }
我想知道是否有任何方法可以避免每次我有这样一个函数时都必须为T设置一般约束:

ObjectRepo.cs

public void Put<T>(MyObject<T> obj)
  where T : ObjectBase, new()
{
    // code
}
publicsvoidput(myobjectobj)
其中T:ObjectBase,new()
{
//代码
}

如果在MyObject类中指定了T的约束,是否有理由每次使用MyObject作为参数时都必须重新指定?

如果在类中有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
    }
}
公共类MyObject,其中T:ObjectBase,new()
{
//public void Put(MyObject obj)//不起作用
公开作废Put(MyObject obj)//作品
{
//代码
}
}
更新
如果Put位于另一个类中,那么最好的解决方案是重构代码,并将所有与T相关的方法移动到同一个类中(并在该类上添加约束)

更新2

如果无法更新1,则可能需要检查是否可以将T替换为ObjectBase或其他基类

“找不到类型或命名空间“T”(是否缺少using指令或程序集引用)?刚刚看到您的编辑,Put函数位于不同的类中,而不是MyObject类中
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
    }
}