任何方式来获得元组的类型<>项目(S)
问题描述:
其中DEF是任何方式来获得元组的类型<>项目(S)
IEnumerable<Tuple<string, double>> GetValues()
{
....
yield return new Tuple<string,double>(dataRow["<field>"].ToString(),
(double)Convert.ChangeType(dataRow["<field>"], typeof(double)));
....
// and more code similar to above based on other custom logic
}
,你可以看到,山很多铸造/ coerc'ng的一倍 它仍然可以改变。返回字符串或其它数据类型
不知道是否有一种方式来获得在签名定义元组的数据类型,所以我可以创造出一些通用的帮手,而不是担心错过一些转化某处
应该可以与反思?我希望 !
答
如果你有元组的一个实例,你可以通过反射得到泛型类型参数:
var x = Tuple.Create<int, string>(0, "test");
var y = x.GetType().GetGenericArguments();
y[0].Name = "System.Int32";
您可以使用“typeof运算()”获得在编译时相同的信息,或在运行时使用反射,像这样:
public Tuple<string, double> DoSomething()
{
var y = typeof(Tuple<string, double>).GetGenericArguments();
var z = MethodBase.GetCurrentMethod().ReturnType.GetGenericArguments();
}
我不认为这真的会帮助你;你不能将运行时获得的类型信息绑定到编译类型的泛型参数上,这样你就不会节省大量的工作。您仍然最终不得不在某处重复指定数据类型。
Chris Shain的答案(Field<T>
方法)真的是要走到这里的路。
看起来不错,任何干净的方式来处理DBNULL,以及? – Kumar 2012-03-01 14:44:05
通过'Nullable'而不是T,例如'GetValues (...)' –
2012-03-01 14:46:18