我在基类中有一个通用方法,类似于以下内容:

protected bool TryConvertTo<TIn, TOut>(TIn objIn, out TOut objOut)
    where TIn : MyObjectBase
    where TOut : MyObjectBase
{
    objOut = objIn is TOut ? (TOut) (object) objIn : default (TOut);
    return !ReferenceEquals(objOut, default (TOut));
}


假设我在必要的地方进行空检查,并相应地处理任何应用程序异常。将objIn双重转换为对象然后转换为TOut是不好的做法吗?如果是不好的做法,是否有任何技术原因,还是仅反映了整个设计问题?

我觉得这种用法对于我的用例来说是适当的,但是由于我通常不使用这种表达方式,因此我认为征询社区的意见可能是安全的。

最佳答案

鉴于您已将它们都约束为从特定类派生(假设MyObjectBase确实是一个类),为什么不直接使用:

protected bool TryConvertTo<TIn, TOut>(TIn objIn, out TOut objOut)
    where TIn : MyObjectBase
    where TOut : MyObjectBase
{
    objOut = objIn as TOut;
    return objOut != null;
}


(我假设在==中没有自定义转换运算符或!= / MyObjectBase重载。)

另一方面,这首先是一件很奇怪的事情……您确定这是一个适当的设计,而没有考虑实现吗?

关于c# - 将通用T1转换为对象,然后转换为T2,这是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9583764/

10-11 22:37