2012-08-01 87 views
1

我想概括一下我編寫的解決方案,以便可以應用於類似的問題。將可空類型轉換爲參考的簡潔方法

我有許多不同的對象,都包含可爲空的雙打。我想以某種方式將它們(雙打)傳遞到字典中,然後將數據直接放入所討論的對象中。

如果雙打是參考類型,這將工作相當簡單,但他們不是。

所以我需要一個解決方案來引用他們的參考。我能想到的唯一的事情就是創建自己的包含double的類,但是由於我使用了大量的Double代碼,這是很多工作 - 而且我知道你不能擴展值類型。

有關我如何去做的任何想法?

新增 - 下面是我想要做的事情的示例代碼示例。這不是實際的代碼。

void ReadTable(Dictionary<string,double?> dict) 
{ 
//read some sort of table here by usign the string as the headers 
dict["header"] = Convert.toDouble(tableValue); 
//etc... 
} 

MyObject myObject = new MyObject(); 
//fill it up from the table 
Dictionary<string,double?> req = new Dictionary<string,double?>(); 
req.add("header",myObject.something); 
req.add("header2",myObject.somethingElse); 
ReadTable(req); 

MyOtherObject myOtherObject = new MyOtherObject(); 
//fill it up from the table 
Dictionary<string,double?> req2 = new Dictionary<string,double?>(); 
req2.add("aheader",myOtherObject.m2something); 
req2.add("aheader2",myOtherObject.m2somethingElse); 
ReadTable(req2); 
+0

你能解釋一下你的問題嗎?你究竟想要做什麼?你可以給一個代碼示例(即使它不起作用)嗎? – sloth 2012-08-01 09:21:24

+0

我寫了一些示例代碼來澄清。 – Aabela 2012-08-01 09:26:02

回答

2

如果你的目的是使(非編譯代碼,僅供說明之用):

Dictionary<string, ref double?> lookup = ... 

double? someField = ... 

lookup.Add("foo", ref someField); 

再後來:

lookup["foo"] = 123.45; 

,並有出現代碼知道約someField:那的確,那不能也不行。那麼,有一些瘋狂的方式,但不這樣做。你描述的確實是這樣做的正確方法:

public class MyWrapper { 
    public double? Value {get;set;} 
} 

Dictionary<string, MyWrapper> lookup = ... 

MyWrapper someField = new MyWrapper(); 

lookup.Add("foo", someField); 

再後來:

lookup["foo"].Value = 123.45; 

然後任何代碼引用someField.Value將看到新的價值。

你也許可以用泛型來概括這一點。

如果你希望儘量減少代碼的變化,你也許可以添加運算符:

public class MyWrapper { 
    public double? Value {get;set;} 
    public static implicit operator double?(MyWrapper value) { 
     return value == null ? null : value.Value; 
    } 
} 

這將對於不喜歡的東西的任何代碼至少工作:

double? tmp = someField; 

或:

SomeMethodThatTakesNullableDouble(someField); 
+0

是的,你正確理解問題(我添加了一些示例代碼)。 問題是我需要使用Double.Parse()和其他函數 - 什麼會引用我的對象期望「雙?」。所以我需要繼續轉換他們三次。這不是很乾淨。 – Aabela 2012-08-01 09:27:48

+0

只是查找隱含的關鍵字。這可能沒有太多的改變 - 我只是改變對象使用這個包裝。希望沒有任何調用'getType'的代碼... – Aabela 2012-08-01 09:34:36

+0

好的,它不會工作,因爲他們需要進入數據庫,我很確定mysql參數添加函數將檢查類型。我無法重寫getType ... – Aabela 2012-08-01 09:37:43

相關問題