我正在从具有一些常见和几个不同属性的不同类型的CSV文件中读取用户输入。我已经创建了一个基类TestCaseData和派生类,如下所示:
public abstract class TestCaseData
{
public abstract string ID { get; set; }
public abstract string Name{ get; set; }
}
public class DerivedClassOne :TestCaseData
{
public override string ID { get; set; }
public override string Name{ get; set; }
pubic string DerivedOneProperty{ get; set; }
}
public class DerivedClassTwo :TestCaseData
{
public override string ID { get; set; }
public override string Name{ get; set; }
pubic string DerivedTwoProperty{ get; set; }
}
我正在阅读CSV文件并创建派生类列表并分配到基类列表,如下所示
List<TestCaseData> lstTestCaseData = MethodCallToReturnListOf_DerivedOneClassFromCSV();
现在我有lstTestCaseData
我还必须验证用户输入,我无法找到一种方法来编写单个方法来验证类型DerivedOneProperty
或DerivedTwoProperty
的用户输入因为他们有自己的属性。有人可以帮我吗?
我有类似的方法签名
public string ValidateCompleteFile(List<TestCaseData> TestCaseInputList, out bool IsInputValid)
答案 0 :(得分:2)
您可以在TestCaseData类上放置一个抽象验证方法,然后让每个继承此类的类实现它们所需的方式。
public abstract class TestCaseData
{
public abstract string ID { get; set; }
public abstract string Name{ get; set; }
public abstract bool Validate();
}
然后为TestCaseInputList集合中的每个条目调用此方法。
答案 1 :(得分:0)
如果您致力于最初构想的代码模式(即在每个对象上调用验证方法),那么关于抽象方法的答案是最佳解决方案。但也许最好在其setter中验证每个字段:
public abstract class TestCaseData
{
private string id, name;
public abstract string ID { get; set; }
public abstract string Name{ get; set; }
}
public class DerivedClassOne : TestCaseData
{
public override string ID
{
get { return id; }
set
{
if ( ... ) throw new ArgumentException();
...
id = value;
}
}
...
}
这样一旦遇到无效值就会抛出异常。想象一下,如果您在检查每个对象是否有效之前创建了一百万个这些对象,那么只会发现第一个对象无效。该解决方案通过在设置属性时主动验证来避免这种情况。