使用辅助投射功能时的约定

时间:2010-05-17 17:37:33

标签: c# design-patterns casting

我最近开始使用函数让我的手指更容易进行投射,例如我有这样的事情

((Dictionary<string,string>)value).Add(foo);

并将其转换为一个小小的辅助函数,所以我可以这样做

ToDictionary(value).Add(foo);

这是否符合编码标准?

另外,更简单的例子呢?例如,在我的脚本引擎中,我考虑过制作这样的东西

((StringVariable)arg).Value="foo";

ToStringVar(arg).Value="foo";

我真的不喜欢如何投射一个值并立即从中获取一个属性,你必须将它括在双括号中。我觉得最后一个比第一个差得多,但是

3 个答案:

答案 0 :(得分:4)

暂时忽略你可能真的需要做这个演员 - 我个人怀疑 - 如果你真的只是想“保存你的手指”,你可以使用using声明来缩短你的名字通用类型。

在文件的顶部,包含所有其他用途:

using ShorterType = Dictionary<string, Dictionary<int, List<Dictionary<OtherType, ThisIsRidiculous>>>>;

答案 1 :(得分:1)

我不这么认为。你也做了一些很好的事情,因为它更容易阅读并看到发生了什么。 Glib(在C中)为它们的类提供了构建宏,因此这不是一个新概念。只是不要过度杀戮试图挽救你的手指。

答案 2 :(得分:0)

一般来说,我认为这是代码味道。在大多数需要描述的转换类型的情况下,除了泛型/模板之外,通过正确使用接口(Java)或虚拟继承(C ++)可以获得相同的行为。将管理类型的责任留给编译器比尝试自己管理它更安全。

如果没有其他背景,很难说你所包含的例子。在某种情况下,你所描述的铸造类型是不可避免的;但他们是例外,而不是规则。例如,您描述的转换类型(以及关联的辅助函数/宏)在通用C库中非常常见。