将所有字符串属性初始化为某个值

时间:2013-07-06 15:46:49

标签: c#

我有一些包含字符串的对象模型。其中一些属性在运行时填充,但有些属性不是这样,当我将这些对象映射回某些数据库字段时,某些字段将存储为NULL而不是仅存储为空字符串。为了解决这个问题,我在构造函数中将这些属性设置为= "";。现在我已经获得了大约30个字符串属性,因此很多行只是将字符串属性设置为""。有没有办法说出来

"at object instantiation, set all strings to = "";

这样我就可以写

public class MyModel : SomeSpecialTypeThatInitializesStrings {}

感谢。

2 个答案:

答案 0 :(得分:2)

最好在SQL Server端设置varchar列的默认值

来处理此问题

示例:

ALTER TABLE EMPLOYEE ADD COLUMNNAME VARCHAR(50) DEFAULT ''

答案 1 :(得分:1)

是的,有。我在我的项目中编写了一个宏解析器,它解析了特定对象中宏的所有字符串属性。我们的想法是使用反射来迭代对象的属性,并在适当的方法上调用SetValue方法。

当天的第一个订单(对我而言)是为System.Type

创建扩展方法
public static partial class TypeExtensionMethods
{
    public static PropertyInfo[] GetPublicProperties(this Type self)
    {
        return self.GetProperties(BindingFlags.Public | BindingFlags.Instance).Where((property) => property.GetIndexParameters().Length == 0 && property.CanRead && property.CanWrite).ToArray();
    }   // eo GetPublicProperties
}   // eo class TypeExtensionMethods

然后在对象上使用它(注意,ForEach是一种扩展方法,但只是for each()的简写:

        obj.GetType().GetPublicProperties().ForEach((property) =>
            {
                if (property.GetGetMethod().ReturnType == typeof(string))
                {
                    string value = (string)property.GetValue(obj, null);
                    if (value == null)
                        property.SetValue(obj, string.Empty, null);
                }
            }