转换数据类型并将其用作TestContext.DataRow的扩展方法

时间:2017-10-24 13:41:17

标签: c# mstest

我有一个使用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");

我有两种不同的数据类型,当我使用上面的扩展方法时,每个都应该给我有效的数据和类型。对我来说它的工作正常。但是,我是如何进行类型转换并将其作为扩展方法的呢?

1 个答案:

答案 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