好的, 我有一些我不太喜欢的代码。鉴于我没有写出它,只是继承了它,我发现我可以清理它一点。基本上,我们有一个用NHibernate持久化的设置对象。除了说它包含一个具有我们保存在数据库中的实际值的字典之外,我不会让你知道实现细节。返回简单类型的泛型方法
我们的典型属性实现看起来是这样的:
public string MyDumbProperty
{
get { return GetStringValue("MyDumbProperty", string.Empty); }
set { SetValue("MyDumbProperty", value);}
}
现在,它可能是明显的,从上面的实现,我们有我们每返回类型的单独的getXXXX方法(字符串,整型,长整型,浮点,等等),第二个参数是默认值。我想要的是能够做到以下几点:
public string MyDumbProperty
{
get { return GetValue("MyDumbProperty", string.Empty); }
set { SetValue("MyDumbProperty", value);}
}
我有几个原因想要做到这一点。最大的问题是,我个人不喜欢根据他们所采用的参数类型命名的方法。第二个是我想为这个垃圾做一个resharper模板。然后我可以填写财产的名称和类型,并完成(假定resharper可以给出该类型的合理默认值)。
我曾想过制作一个返回T的泛型方法GetValue,但我不知道如何设置泛型约束,因此这是可行的。从这返回的类型将全部是基本类型(字符串,整数等)。有几个返回数组,但我总是可以在这些数组上做些不同的事情。无论如何,这不是一个高度优先的问题,但每当我看到它时都会让我很烦恼。我只是觉得应该有更好的方法来做到这一点。
我想第一步就是重命名各种方法。因为它们在第二个参数的默认值类型上有所不同,所以我至少可以将它们强制为相同的名称。但我能做得比这更好吗?如果我可以摆脱每种方法中重复代码的多个位,这些代码在所使用的数据类型(所有数字类型中的TryParse)方面都不相同,那将会很棒。
你看过DependancyProperty的部署方式吗?你基本上有一个DependancyProperty的模型! –
这一切都取决于你的'GetValue'方法。泛型很容易做到这一点,而类型可以通过第二个参数来推断。 – vcsjones
出于好奇,你是什么类型的字典?如果它存储了所有不同类型的值,它只是一个Dictionary,它会随着人们试图避免的所有装箱/拆箱而出现? –
itsme86