如何为派生类对象编写验证方法
本文关键字:验证 方法 对象 派生 | 更新日期: 2023-09-27 18:12:46
我正在读取来自不同类型的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)
您可以在TestCaseData类上放置一个抽象的验证方法,然后让每个继承这个类的类按照它们需要的方式实现它。
public abstract class TestCaseData
{
public abstract string ID { get; set; }
public abstract string Name{ get; set; }
public abstract bool Validate();
}
然后为TestCaseInputList集合中的每个条目调用此方法。
关于抽象方法的答案是最好的解决方案,如果您致力于您最初设想的代码模式(即在每个对象上调用验证方法)。但是,也许最好在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;
}
}
...
}
这样,一旦遇到无效值就会抛出异常。想象一下,如果您在检查每个对象是否有效之前创建了一百万个这样的对象,却发现第一个对象无效。该解决方案通过在属性设置时进行主动验证来避免这种情况。