1

「ダイナミック」というプロパティとSetDefaultValues()同じDLLにあるメソッドがあります。プロパティを以下に示します

public class ManagedProperty: DataModelObject, ISerializable 
{

    public bool Dynamic 
    {
        get 
        {
            return m_dynamic;
        }
        set 
        {
            m_dynamic = value;
        }
    }
    private bool m_dynamic = true;
}

メソッドSetDefaultValues()は、デフォルトですべての値をデフォルトにします。現在直面している問題は、ウィンドウサービスを再起動するたびに、バグである元の値からデフォルトになっていることです。したがって、私が望んでいた条件は、「動的」プロパティがfalseである場合は常に、それが破損してはならないということです。

したがって、ウィンドウサービスでコードを引き起こす問題を以下に示します。デバッガーはプロパティDynamicを常にtrueと表示します

                          for (int i = 0; i < allObjects.Count; i++)
                                    {
                                        DataModelObject dmo = (DataModelObject)allObjects.GetAt(i);
                                        dmo.SatisfyGRs(allObjects); // Satisfy all GUID references.
                                        if (dmo is ManagedDevice)
                                        {
                                            ManagedDevice md = (ManagedDevice)dmo;

                                            // Set default values for user defined properties
                                            if (md.SetDefaultValues())
                                            {
                                                SaveObject(md, false);
                                            }
                                            md.CheckThresholds();   // Check thresholds on all properties
                                        }
                                    }

以下のように変更しましたが、正しく動作しておらず、デフォルト値に設定されているかわかりません。誰かがここで何が間違っているのか教えてもらえますか、またはすべてが正しく、他の環境をチェックする必要があります

                          for (int i = 0; i < allObjects.Count; i++)
                                    {
                                        DataModelObject dmo = (DataModelObject)allObjects.GetAt(i);
                                        dmo.SatisfyGRs(allObjects); // Satisfy all GUID references.
                                        if (dmo is ManagedDevice)
                                        {
                                            ManagedDevice md = (ManagedDevice)dmo;
                                            ManagedProperty userprop = new ManagedProperty();
                                            if (userprop.Dynamic == false){
                                            // Set default values for user defined properties
                                            if (md.SetDefaultValues())
                                            {
                                                SaveObject(md, false);
                                            }}
                                            md.CheckThresholds();   // Check thresholds on all properties
                                        }
                                    }
4

1 に答える 1

0

問題は、フィールド初期化子で m_dynamic を true に設定していることです。

private bool m_dynamic = true;

次に、次のコードがあります。

ManagedProperty userprop = new ManagedProperty();
if (userprop.Dynamic == false)

どうしてそれが真実以外の何かでありえようか? ManagedProperty をインスタンス化すると、Dynamic は毎回 true になります。

于 2012-11-29T13:11:29.913 に答える