需要泛型方法来返回类型T,除非T实现接口I,在这种情况下返回I

Lau*_*nce 0 c# generics interface

我有一个返回类型T的泛型方法.现在我想修改它,以便如果T碰巧实现接口I,则在对象上设置一个附加属性(即从I开始).

像这样的东西(但当然这不起作用):

    public T MyMethod<T>()
    {
        T resultAsT = some function ....

        var resultAsI = (resultAsT as I);

        if (resultAsI != null)
        {
            resultAsI.PropertyOnlyAvailableInI = 99;
            return resultAsI;
        }
        else
            return resultAsT;
    }
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?

Dmi*_*try 7

这应该工作:

public T MyMethod<T>()
{
    T resultAsT = some function ....

    var resultAsI = (resultAsT as I);

    if (resultAsI != null)
    {
        resultAsI.PropertyOnlyAvailableInI = 99;
    }
    return resultAsT;
}
Run Code Online (Sandbox Code Playgroud)

除了之外T,该方法不能返回任何内容,因此您应该始终返回resultAsT.