[英]How to check if certain properties of an object are not empty in C#
我上课了
class A {
propA { get; set; }
propB { get; set; }
propC { get; set; }
target { get; set; }
}
我计算出A类的目标,并用用户输入填充该类。 每个不同的目标都意味着需要不同类的属性(不是空/ null)。
因此,如果我的目标是香蕉,那么propA和propB不能为空。 如果是apple,那么propB和propC一定不能为空。 我需要在应用程序启动时执行此操作,以便在后续阶段不再进行检查,因为某些方法和数据库调用将需要数据等。
编码的最佳方法是什么? 甚至是设计明智的。 在枚举中存储每个目标所需的属性是一种好的做法吗? 然后使用下面提供的lazyberezovsky来检查?
上面的例子只有3个属性,但我实际需要做的事情还有更多。
我刚刚开始研究验证代码的方法。
总之,这个问题有两个部分。 - 如何检查类的属性是否为空 - 在某处存储不同组合所需属性的列表以用于检查如何检查
编辑:抱歉! 我编辑过,希望能更好地理解这一点。
让我试着猜猜是什么问题:)
这是类型验证器,它可以检查参数的公共属性是否存在:
public class TypeValidator<T>
{
public bool IsPropertyExists(string propertyName)
{
Type type = typeof(T);
BindingFlags flags = BindingFlags.Instance | BindingFlags.Public;
foreach (PropertyInfo property in type.GetProperties(flags))
if (property.Name == propertyName)
return true;
return false;
}
}
与您的班级一起使用:
TypeValidator<a> validator = new TypeValidator<a>();
validator.IsPropertyExists("PropB")
或者您可以将它用作扩展方法public static bool IsPropertyExists<T>(this T t, string propertyName)
与任何对象或泛型参数。 但对我来说反思是邪恶的:)尝试通过设计解决这个问题。
我认为你所追求的是模型验证。 如果是这样,也许放置验证逻辑的好地方是A类方法,如下所示:
Class A
{
Nullable<int> propA { get; set; }
int? propB { get; set; }
int? propC { get; set; }
string target {
get { return _target; }
set {
var oldtarget = _target;
_target = value;
if !IsValid()
{
_target = oldtarget;
throw new Exception("Setting target to "
+ value
+ " is not possible, ....");
}
}
}
public bool IsValid()
{
switch (_target)
{
case "banana":
return propA.HasValue() && propB.HasValue();
case "apple":
return propB.HasValue() && propC.HasValue();
}
return true;
}
}
如何检查propA是空的? 取决于propA是什么......它是一个int吗? 一个博尔? 一个字符串? 等...假设它是一个int而不是你可以使用上面的方法...
想不出比IsValid()更“通用”的验证,也就是说,我想不出更通用的方法来验证而不知道更多...
我猜你的意思是当你说房产存在时的验证。
您尚未指定其Web或Win Form / Wpf应用程序(或whatelse)。
您可以在类上实现IDataErrorInfo并验证属性是否已正确填充。
在使用IDataErrorInfo + Validate进行Google搜索时,有大量示例可供查找,但以下是一些帮助我的例子:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.