【发布时间】:2013-07-23 17:48:59
【问题描述】:
我有一个可以将字符串值转换为各种类型的扩展方法,它看起来像这样:
public static T ToType<T> (this string value, T property)
{
object parsedValue = default(T);
Type type = property.GetType();
try
{
parsedValue = Convert.ChangeType(value, type);
}
catch (ArgumentException e)
{
parsedValue = null;
}
return (T)parsedValue;
}
我对调用该方法时的外观不满意,但是:
myObject.someProperty = stringData.ToType(myObject.someProperty);
仅仅为了获取属性的类型而指定属性似乎是多余的。我宁愿使用这样的签名:
public static T ToType<T> (this string value, Type type) { ... }
并让 T 最终成为类型的类型。这将使调用更清晰:
myObject.someProperty = stringData.ToType(typeof(decimal));
但是,当我尝试以这种方式调用时,编辑器抱怨无法从使用情况中推断出扩展方法的返回类型。我可以将 T 链接到 Type 参数吗?
我错过了什么?
谢谢
【问题讨论】:
-
我可以将 T 链接到 Type 参数吗? — 不能直接¹。您正在混淆编译时和运行时。当 C# 编译器在编译代码时处理对
ToType的调用时,必须确定T是什么。 OTOHtype每次调用ToType时都会假定一个可能不同的值。 -------------------------------------------------- ------- ¹ — 您可以使用其中一种动态编译,但它是一种先进的技术,最好保留在真正需要的少数情况下。 -
感谢大家的回答和意见。