我有一些这样的课:

public class BaseClass
{
    public int Id { get; set; }
    public void MethodOfBase(){}
}
public class Deliver1 : BaseClass
{
    public string Name { get; set; }
}
public class Deliver2 : BaseClass
{
    public string ClassName { get; set; }
}
public class Deliver3 : BaseClass
{
    public int Age { get; set; }
}


我有一些代码:

    public void Method1()
    {
        Deliver1 deliver1 = null;
        MethodWithBaseClass(deliver1);

        Deliver2 deliver2 = null;
        MethodWithBaseClass(deliver2);

        Deliver3 deliver3 = new Deliver3();
        MethodWithBaseClass(deliver3);


    }

    public void MethodWithBaseClass(BaseClass baseClass)
    {
        if(baseClass == null)
            baseClass = ???
    }


我想初始化传递
但我不想这样检查:

    public void MethodWithBaseClass(BaseClass baseClass)
    {
        if (baseClass == null && baseClass is Deliver1)
            baseClass = new Deliver1();
        else if.....
    }


因为太多的中频检查。
可能吗?以及如何做到这一点?

非常感谢!

最佳答案

您编写的代码无法实现,因为if (baseClass == null && baseClass is Deliver1)将始终返回false。那是因为检查null引用上的类型无效(它检查值,而不是后备变量类型)。

在这种情况下,您必须使用泛型(和ref),但我认为这不是一个特别好的设计:

public void MethodWithBaseClass<T>(ref T instance) where T : new()
{
    if (instance == null)
    {
        instance = new T();
    }
}


用法:

Deliver1 deliver1 = null;
MethodWithBaseClass(ref deliver1);

关于c# - 在参数上按基类初始化传递类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52830567/

10-11 21:02