将通用T1转换为对象,然后转换为T2是不好的做法?

时间:2012-03-06 12:31:34

标签: c# generics casting

我在基类中有一个类似于以下内容的泛型方法:

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));
}

假设我在必要时进行空值检查并相应地处理任何应用程序异常。对于&#34; double cast&#34;是不好的做法objIn to object然后to TOut?如果这是不好的做法,是否有任何技术原因,或者仅仅是整体设计问题的反映?

根据我的用例,我认为用法是合适的,但由于我通常不会使用这样的表达,我认为获得社群的意见可能是安全的。

1 个答案:

答案 0 :(得分:9)

鉴于你已经限制它们从一个特定的类派生(假设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重载。)

另一方面,这首先想做一件相当奇怪的事情......你确定它是一个合适的设计,不考虑实现吗?