C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c# – 优化通用方法逻辑大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个通用方法,我们可以将T作为接口类型传递.方法返回对应T类型的数据列表.我对此方法有20-25条相同的条件如何优化逻辑.

类实现接口.示例student类实现Istudent接口.@H_674_7@

public ObservableCollection<T> GetAll<T>()
    {
        try
        {
            if (typeof(T) == typeof(Istudent))
            {                 
                return GetAll<T,student>();
            }
            else if (typeof(T) == typeof(IZonE))
            {
                return GetAll<T,Zone>();
            }
            else if (typeof(T) == typeof(IemployeE))
            {
                return GetAll<T,employee>();
            }
            else if (typeof(T) == typeof(ICoursE))
            {
                return GetAll<T,Course>();
            }
         }
    }

这里调用者传递接口类型T和I检查T的类型.我传递给其他函数T和将返回T的列表的类.其他函数在基类中我无法改变.
有谁能建议我一些相同的东西.@H_674_7@

解决方法

你可以尝试通过反思来做到这一点.

public ObservableCollection<T> GetAll<T>()
{
    var typename = typeof(T).FullName;
    var indexOfDot = typename.LasTindexOf('.');
    var newTypename = typename.SubString(0,indexOfDot) + '.' + typename.SubString(indexOfDot + 1);
    var newType = Type.GetType(newTypeName);
    var methodTypes = new [] { typeof(T),newType };
    var method = GetType().getmethod("GetAll");
    var typedMethod = method.MakeGenericMethod(methodTypes);
    return (ObservableCollection<T>) typedMethod.Invoke(this,new object[0]);
}

不漂亮,但应该做的工作,并做一般.@H_674_7@

当前方式唯一的警告是GetAll方法被泛型参数重载,因此它可能无法使您获得正确的方法,或者因为有两个方法而失败.如果可以指出正确的那个,我会看看.@H_674_7@

大佬总结

以上是大佬教程为你收集整理的c# – 优化通用方法逻辑全部内容,希望文章能够帮你解决c# – 优化通用方法逻辑所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。