我最近開始開始使用功能,使的一個實例我有這樣的事情幫手鑄造功能 - 它是一種代碼味道?
((Dictionary<string,string>)value).Add(foo);
鑄造我的手指更容易和它轉化爲一個小小的輔助函數,所以我能做到這一點
ToDictionary(value).Add(foo);
這是代碼味道嗎?
另外,更簡單的例子呢?例如,在我的腳本引擎,我認爲做這樣的
((StringVariable)arg).Value="foo";
事情是
ToStringVar(arg).Value="foo";
我真的不喜歡怎麼序蒙上了價值,並立即從它那裏得到一個屬性,您必須將其括在雙括號內。我有一種感覺,最後一個是比第一個雖然
(也是我這個標記語言無關的,即使我舉的例子是C#)
*嗅出嗅出*聞起來像肉桂,丁香的暗示。一個相當愉快的花束。 :) 這並沒有那麼糟糕,但也許你可能想在方法中包含'Add':AddToDictionary(value,foo);'(如果這就是你如何使用它的話)。 – FrustratedWithFormsDesigner 2010-05-17 17:41:40
這是Generics表面上應該修復的代碼味道。 我有興趣知道爲什麼你不知道你有一個字符串 - >字符串映射分配給代碼中的'值'變量? 如果答案是「因爲一些我無法控制/影響的人寫了一個返回模糊類型的模塊函數。」在這種情況下,我做了兩件事。 1)繼續努力研究'某個人'和他的代碼,2)我在分配時爲數據類型排除歧義。在我的方法或獲取值的代碼塊的頂部,我聲明瞭一個Dictionary併爲其賦值'value'。 –
Jason
2010-05-17 17:44:09
@Jason這真的是不可避免的。那只是一個例子。看到我的第二個例子(這是真實的)。儘管你可能應該做的第二件事情,但它並不總是這樣,因爲這個函數傳入一個BaseVariable,有時它需要被轉換爲一個IntegerVariable或StringVariable。這就是腳本引擎目前的工作方式。 – Earlz 2010-05-17 17:48:04