C# 将泛型T1转换为对象,然后再转换为T2,这是一种不好的做法吗?

C# 将泛型T1转换为对象,然后再转换为T2,这是一种不好的做法吗?,c#,generics,casting,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 !ReferenceEqua

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

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));
}
protected bool TryConvertTo(TIn objIn,out TOut objOut)
其中TIn:MyObjectBase
where TOut:MyObjectBase
{
objOut=objIn是TOut?(TOut)(object)objIn:默认值(TOut);
return!ReferenceEquals(objOut,default(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;
}
protected bool TryConvertTo(TIn objIn,out TOut objOut)
其中TIn:MyObjectBase
where TOut:MyObjectBase
{
objOut=objIn作为兜售者;
返回对象!=null;
}
(我假设在
MyObjectBase
中没有自定义转换运算符或
=
/
!=
重载)


另一方面,这感觉像是一个相当奇怪的事情想做的第一位。。。撇开实现不谈,您确定这是一个合适的设计吗?

既然您已将它们都限制为派生自特定类(假设MyObjectBase确实是一个类),为什么不使用:

protected bool TryConvertTo<TIn, TOut>(TIn objIn, out TOut objOut)
    where TIn : MyObjectBase
    where TOut : MyObjectBase
{
    objOut = objIn as TOut;
    return objOut != null;
}
protected bool TryConvertTo(TIn objIn,out TOut objOut)
其中TIn:MyObjectBase
where TOut:MyObjectBase
{
objOut=objIn作为兜售者;
返回对象!=null;
}
(我假设在
MyObjectBase
中没有自定义转换运算符或
=
/
!=
重载)


另一方面,这感觉像是一个相当奇怪的事情想做的第一位。。。撇开实现不谈,你确定这是一个合适的设计吗?

“我觉得这个用法适合我的用例”你的用例是什么?我觉得这个用法适合我的用例”您的用例是什么?这确实是/曾经是总体设计的问题…我让提供接口的团队修复了他们的设计。真的不需要做双重演员。很高兴知道我没有疯狂地感觉到有些事情不太对劲。你是对的,“objOut=objIn作为兜售代码”更有意义。不知什么原因,我在早上5:30放了个脑屁,误以为是不安全的石膏。再次感谢!这确实是/曾经是整体设计的问题……我让提供接口的团队修复了他们的设计。真的不需要做双重演员。很高兴知道我没有疯狂地感觉到有些事情不太对劲。你是对的,“objOut=objIn作为兜售代码”更有意义。不知什么原因,我在早上5:30放了个脑屁,误以为是不安全的石膏。再次感谢!