Well here is just more of the same, Stephen posted about querying an item to see whether it's "dirty" or not.  Here is the .NET equivalent. I didn't actually test these this time so your feedback is welcome.

Visual Basic

Public Function IsItemDirty(ByVal itm As Object) As Boolean
  Dim typeDispatch As Type = itm.GetType()
  Dim dispidIsDirtyMemberName As String = String.Format("[DispID={0}]", _ 
 &HF024)
  Dim retVal As Boolean = False
  Try
    retVal = typeDispatch.InvokeMember(dispidIsDirtyMemberName, _ 
        System.Reflection.BindingFlags.InvokeMethod _ 
        Or System.Reflection.BindingFlags.GetProperty, _
        Nothing, _
        itm, _
        Nothing)
  Catch comEx As System.Runtime.InteropServices.COMException

  End Try
End Sub

 

C#

public bool IsItemDirty(object itm)
{
  Type typeDispatch = itm.GetType();
  string dispidIsItemDirtyMemberName = String.Format("[DispID={0}]", 0xF024);
  bool retVal = false;

  try
  {
    retVal = (bool)typeDispatch.InvokeMember(dispidIsItemDirtyMemberName, 
        System.Reflection.BindingFlags.InvokeMethod |
        System.Reflection.BindingFlags.GetProperty,
        null,
        itm,
        null);
  }
  catch(System.Runtime.InteropServices.COMException comEx)
  {

  }
  return retVal;
}