【问题标题】:How to check if a state object is of type ICollection如何检查状态对象是否为 ICollection 类型
【发布时间】:2016-06-11 00:08:49
【问题描述】:

我使用 nhibernate 拦截器来比较实体属性的旧状态和当前状态的值,但其中一些属性的类型为 ICollection,所以任何人都可以指导我如何检查对象是否为 @ 类型987654322@

这是我的代码

    public void OnPostUpdate(NHibernate.Event.PostUpdateEvent @event)
    {
        var entityToAudit = @event.Entity as IAuditable;
        string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AuditLog.txt");
        using (StreamWriter sw = File.AppendText(path))
        {
            for (int i = 0; i < @event.OldState.Length; i++)
            {
                string propertyName = @event.Persister.PropertyNames[i];
                if (@event.OldState[i] != null)
                {
                    if (!@event.OldState[i].Equals(@event.State[i]))
                    {
                        sw.WriteLine("the value of "+ propertyName + " has been changed from " + @event.OldState[i] + " to " + @event.State[i]);
                    }
                }
                else
                {
                    if (@event.State[i] != null)
                    {
                        sw.WriteLine("the value of "+ propertyName + " has been changed from being empty to " + @event.State[i]);
                    }
                }
            }
        }
    }

【问题讨论】:

  • 无论如何,集合都有自己的“先前”状态跟踪。 (通常)只有一个集合的实例,所以你不能那么容易地比较它。顺便说一句,在 OnPostUpdate 触发器中写入文件时,我不会有好的感觉。除了非常糟糕的性能之外,想象一下循环文件锁和数据库锁可能会导致非常讨厌的死锁。

标签: c# nhibernate reflection fluent-nhibernate icollection


【解决方案1】:

您有多个选项可以做到这一点,使用 is 或使用 as 进行空值检查:

if (obj is ICollection){
    //your logic
}

或者,如果您以后需要该对象作为 ICollection,我建议使用 as

var icoll = obj as ICollection
if (icoll != null){
    //use icoll
    //icoll.Something();
}

【讨论】:

    【解决方案2】:

    您可以使用简单的 is 来检查类型 像这样:

    var obj = getObject();
    if(obj is TypeYouWant)
        doSomething();
    

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-28
      • 2011-09-26
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多