0

文字列を含むオブジェクト モデルがいくつかあります。これらのプロパティの一部は実行時に取り込まれますが、そうでないものもあり、これらのオブジェクトを一部のデータベース フィールドにマップし直すと、一部のフィールドは単なる空の文字列ではなく NULL として格納されます。これを回避するため= "";に、コンストラクターでこれらのプロパティを設定します。現在、これらの文字列プロパティが約 30 個あるので、文字列プロパティを "" に設定するだけの行がたくさんあります。言い方はありますか

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

書けるように

public class MyModel : SomeSpecialTypeThatInitializesStrings {}

ありがとう。

4

2 に答える 2

2

varchar 列のデフォルト値を設定する SQL Server 側でこの問題を処理することをお勧めします。

例:

ALTER TABLE EMPLOYEE ADD COLUMNNAME VARCHAR(50) DEFAULT ''
于 2013-07-06T15:50:57.053 に答える
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);
                }
            }
于 2013-07-06T15:52:25.743 に答える