我最近开始使用函数让我的手指更容易进行投射,例如我有这样的事情
((Dictionary<string,string>)value).Add(foo);
并将其转换为一个小小的辅助函数,所以我可以这样做
ToDictionary(value).Add(foo);
这是否符合编码标准?
另外,更简单的例子呢?例如,在我的脚本引擎中,我考虑过制作这样的东西
((StringVariable)arg).Value="foo";
是
ToStringVar(arg).Value="foo";
我真的不喜欢如何投射一个值并立即从中获取一个属性,你必须将它括在双括号中。我觉得最后一个比第一个差得多,但是
答案 0 :(得分:4)
暂时忽略你可能真的需要做这个演员 - 我个人怀疑 - 如果你真的只是想“保存你的手指”,你可以使用using
声明来缩短你的名字通用类型。
在文件的顶部,包含所有其他用途:
using ShorterType = Dictionary<string, Dictionary<int, List<Dictionary<OtherType, ThisIsRidiculous>>>>;
答案 1 :(得分:1)
我不这么认为。你也做了一些很好的事情,因为它更容易阅读并看到发生了什么。 Glib(在C中)为它们的类提供了构建宏,因此这不是一个新概念。只是不要过度杀戮试图挽救你的手指。
答案 2 :(得分:0)
一般来说,我认为这是代码味道。在大多数需要描述的转换类型的情况下,除了泛型/模板之外,通过正确使用接口(Java)或虚拟继承(C ++)可以获得相同的行为。将管理类型的责任留给编译器比尝试自己管理它更安全。
如果没有其他背景,很难说你所包含的例子。在某种情况下,你所描述的铸造类型是不可避免的;但他们是例外,而不是规则。例如,您描述的转换类型(以及关联的辅助函数/宏)在通用C库中非常常见。