2012-08-01 82 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

相关问题