SPListItemから作成者などのSPUserオブジェクトを得るには?

あるアイテムのユーザーのフィールド(複数選択不可の場合)の値をSPListItemオブジェクトからたとえばSPListItem["作成者"]取得すると「ID;#ユーザ名」という文字列になってしまいます。このままではログイン名がわかりません。できれば、SPUserオブジェクトがほしいです。
それをするための、とりあえず知っている方法を以下に書きます。(itemが該当のSPListItemで、webは親SPWebオブジェクトとします。)

SPFieldUserValue usrFldVal = new SPFieldUserValue(web, item["作成者"].ToString());
SPUser user = usrFldVal.User;
//たとえばログイン名を取得
string loginName = user.LoginName;

もっといい方法ないのでしょうか。。。
また、複数指定可能なユーザーのフィールドの場合は、

//事前に"複数ユーザ"という名前の複数指定可能なユーザー列を追加してあります。
if (item["複数ユーザ"] != null)
{
	SPFieldUserValueCollection usrfldvalColl = new SPFieldUserValueCollection(web, item["複数ユーザ"].ToString());
	List<SPUser> users = usrfldvalColl.ConvertAll<SPUser>(delegate(SPFieldUserValue val) { return val.User; });
	//処理
}

でいけました。
これも、もっといい方法ないのでしょうか。。。
ちなみに、複数指定不可のユーザーフィールドは上記のような文字列であるのに対して、複数指定可能ユーザーフィールドの場合はitem["複数ユーザ"]はnullでなければSPFieldUserValueCollection オブジェクトが直接入っていました。上記のusrfldvalCollは以下のように書けます。

SPFieldUserValueCollection usrfldvalColl = item["複数ユーザ"] as SPFieldUserValueCollection;

なぜ複数指定不可のユーザーフィールドは文字列なのか謎です。