我有一个类,我想用它来存储另一个类的"properties" . 这些属性只具有名称和值 . 理想情况下,我想要的是能够添加类型属性,以便"value"返回始终是我想要的类型 .
类型应该始终是原始的 . 此类是一个抽象类的子类,它基本上将名称和值存储为字符串 . 这个想法是这个子类将为基类添加一些类型安全性(以及为我节省一些转换) .
所以,我创建了一个类(大致)这个:
public class TypedProperty<DataType> : Property
{
public DataType TypedValue
{
get { // Having problems here! }
set { base.Value = value.ToString();}
}
}
所以问题是:
Is there a "generic" way to convert from string back to a primitive?
我似乎找不到任何通用的界面链接转换(像ITryParsable这样理想!) .
9 回答
对于许多类型(整数,双精度,日期时间等),有一个静态Parse方法 . 您可以使用反射调用它:
您可以使用诸如traits class之类的构造 . 通过这种方式,您将拥有一个参数化的帮助程序类,它知道如何将字符串转换为自己类型的值 . 那么你的getter可能看起来像这样:
现在,我必须指出,我对参数化类型的体验仅限于C及其模板,但我想有一些方法可以使用C#泛型做同样的事情 .
我使用通过对象转换 . 这有点简单 .
然而,lubos hasko 's method fails for nullables. The method below will work for nullables. I didn'想出了它 . 我通过谷歌找到了它:http://web.archive.org/web/20101214042641/http://dogaoztuzun.com/post/C-Generic-Type-Conversion.aspx信用证"Tuna Toksoz"
用法优先:
课程如下 .
又一种变化 . 处理Nullables,以及字符串为null且T不可为空的情况 .
我使用了lobos的答案而且很有效 . 但由于文化设置的原因,我对 doubles 的转换存在问题 . 所以我补充道
检查静态
Nullable.GetUnderlyingType
. - 如果基础类型为null,则模板参数不是Nullable
,我们可以直接使用该类型 - 如果基础类型不为null,则在转换中使用基础类型 .似乎为我工作:
我不确定我是否理解你的意图,但让我们看看这个是否有帮助 .
TypeDescriptor
是具有方法GetConvertor
的类,它接受Type
对象,然后您可以调用ConvertFrom
方法来转换该指定对象的value
.