分かった! かも

 昨日の「「オブジェクト指向」って難しい - 兼業主夫 ときどき 指揮者 のち ギーク?」について、id:kidd-number5さんが親切に教えてくれた。
オブジェクト指向をエンティティ的なクラスでやる場合 - ito.tetsunosuke/notebook

あと、別なところでid:myamya19701022さんも丁寧に教えてくれた。

で、いろいろ調べたり、ない知恵を振り絞って自分なりにいろいろ考えてみた。

 念のため、classがどうなってるかを再掲。

class User
{
  private string strUserName;  //ユーザー名
  private string strCharaName; //キャラクタ名

  public string userName
  {
    get
    {
      return strUserName;
    }
    set
    {
      strUserName = value;
    }
  }

//〜〜以下略〜〜

}

 それでひらめいたんだけど、呼び出し側をこうすればいいんじゃね?

public partial class MainForm : Form
{
  Hashtable userTable = new Hashtable();

  void skype_MessageStatus(ChatMessage pMessage, TChatMessageStatus Status)
  {
    User user = new User();

    if(modeSwitch == "add")
    {//登録時
      user.userName = "ひこ";   //まず値を書き込む
      userTable["キー"] = user; //ハッシュテーブルに格納する
    }

    else if(modeSwitch == "update")
    {//更新時
      user = userTable["キー"];        //まずハッシュテーブルから読み出す
      user.userName = "紫のバラの人"; //変更する値を書き込む
      userTable["キー"] = user;       //ハッシュテーブルに格納する
    }

    else
    {//読み出し時
      user = userTable["キー"];  //まずハッシュテーブルから読み出す
      hogehoge = user.userName; //実際に値を読み出す
    }
  }
}

※ 「modeSwitch」は記述外で宣言されているものとする。

 これなら

if(ht.ContainsKey("チェックしたいキー"))
{
  存在した時の処理
}

//もしくは

if(!ht.ContainsKey("チェックしたいキー"))
{
  存在しない時の処理
}

で、ぶん回さなくても存在チェックが行える。

 って、まだ実際にやってないから、できるかどうか分からないんだけど(汗)