用多个属性搜索和替换对象中的值…c#
本文关键字:对象 替换 属性 搜索 | 更新日期: 2023-09-27 18:13:00
我有一个对象,当我调用数据库时得到填充。返回的结果包含字符串"NULL"。我的对象中大约有40个属性被填充。我如何循环替换所有对象与字符串"NULL"与空字符串没有做这样的古老的方式:
var ttt = GetTheData();
foreach (var t in ttt)
{
if (t.AddressLine1 == "NULL") t.AddressLine1 = string.Empty;
if (t.City == "NULL") t.City = string.Empty;
//so forth and so on
}
不,我不能控制返回的数据。所以,是的,合乎逻辑的方法是在db级别修复它。我希望有人遇到这个问题,并找到一个更好的解决方案。顺便说一句,我使用的是。net 4.0。提前感谢
var ttt = GetTheData();
foreach (var t in ttt)
{
var properties = t.GetType().GetProperties();
foreach(var p in properties){
if(p.PropertyType.Name.Equals("String")){
if(p.GetValue(t,null).ToString() == "NULL")
p.SetValue(t,string.Empty,null);
}
}
}
还有一种替代循环的方法:使用隐式操作符,并使用类来包装字符串:
public sealed class NullableString
{
private readonly string _value;
private NullableString(string value)
{
_value = value;
}
private string Value { get { return _value; } }
public static implicit operator string(NullableString nullableString)
{
return nullableString.Value;
}
public static implicit operator NullableString(string value)
{
if(value == "NULL")
value = string.Empty;
return new NullableString(value);
}
public override string ToString()
{
return Value;
}
}
现在,你的类应该这样声明它的属性:
public class YourClass
{
public NullableString AddressLine { get; set; }
}
由于NullableString
有一个隐式运算符来隐式地将常规string
转换为NullableString
,反之亦然,如果常规string
带有NULL
字面值,它将自动转换为string.Empty
:
YourClass some = new YourClass();
some.AddressLine = "NULL"; // This will store an empty string (i.e. "")
你可以设置一个string
类型的变量:
string addressLine = some.AddressLine;
这个解决方案可能需要一些重构,但它将比使用反射性能更好。
另一种选择,因为你说你无法控制"GetTheData"和它的返回类型(似乎你可能使用某种ORM)将创建一个sql视图,做你需要的,从而使自己免受"NULL"的奇怪。将ORM映射到视图,而不是当前映射到的任何视图。当然,如果源代码改变了很多,那么管理起来就不那么有趣了。
一个简单的字符串扩展方法能满足你的需要吗?例如t.Address1.NullAsEmpty () ?