我有一个使用DataRow从xml获取数据的扩展方法。 而不是将行写为TestContext.DataRow [" Month"]。ToString()。我编写了一个带类型转换的扩展方法:
public static T Get<T>(this DataRow row, string rowName)
{
if (string.IsNullOrWhiteSpace(rowName)) throw new ArgumentNullException(rowName);
TypeConverter converter = TypeDescriptor.GetConverter(typeof(T));
return (T)(converter.ConvertFromInvariantString(row[rowName].ToString()));
}
我的问题是上面的扩展方法是否有意义使用类型转换从xml获取数据,其中我可以给出行
1) string month = TestContext.DataRow.Get<string>("Month");
2) int monthVal = TestContext.DataRow.Get<int>("Month");
我有两种不同的数据类型,当我使用上面的扩展方法时,每个都应该给我有效的数据和类型。对我来说它的工作正常。但是,我是如何进行类型转换并将其作为扩展方法的呢?
答案 0 :(得分:2)
我不确定我是否可以在return语句中使用ToString()。 另外,想知道上述方法是否遵循编码标准 因为我是C#的新手
是的,您可以使用TypeDescriptor.GetConverter
来获取使用ConvertFromInvariantString
将字符串转换为目标类型的转换器。
最后执行return
statement,因此评估表达式的其余部分时。当然需要ToString
因为该方法需要string
而不是System.Object
。
但是,从[{1}}获取变量的正常方法是Field
-extension method,而不是此扩展名:
DataRow
不同之处在于,如果列不是string month = TestContext.DataRow.Field<string>("Month");
int monthVal = TestContext.DataRow.Field<int>("Month");
/ InvalidCastException
,则会引发string
,因此您应该事先知道它是什么。它不可能同时存在。
但你总能这样做:
int