12

ユーザー名を読み取ってから、別のデータベーステーブルに存在するかどうかを確認していますが、問題は、ユーザー名が同じであるのに、場合によっては異なる可能性があり、jsmithとJSmithまたはJSMITHの一致例を見つけることができないことです。

どうすればこれを修正できますか?最初のデータベースに書き込むときに大文字と小文字を区別する必要がありますか、それとも2つを比較するときに以下のコードを変更できますか?

drUser["Enrolled"] = 
    (enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1);

アップデート:

まだこれに苦労していますが、以下のコードはコンパイルされますが、正しい結果は得られません。登録されているユーザーを表示すると、登録されていないユーザーが表示されます。登録されていないユーザーを表示すると、登録されている1が表示されますが、ユーザー名の大文字と小文字は各データバブで同じ。以下のコードを正しくフォーマットしましたか?

drUser["Enrolled"] = (enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));

ありがとうジェイミー

4

5 に答える 5

21

パラメータをとるEqualsメソッドを計算する必要がありStringComparisonます。

例えば:

x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)

可能であれば、静的メソッドを呼び出す必要がありx.Usernameます。nullEquals

String.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase)

それ以外の場合は、x.Username.EqualsをスローできNullReferenceExceptionます。

于 2010-06-25T15:15:18.757 に答える
3

これを行うための好ましい方法は、次のようなものを使用して文字列比較を指定することです。

string.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase

"=="の代わりに、同等性チェックを実行します

于 2010-06-25T15:16:50.160 に答える
0

ToUpper()を使用するのはどうですか。

 if(!(dr["Enrolled"] == null || dr["Username"] == null))
 {
    if(dr["Enrolled"].ToString().ToUpperInvariant()== dr["Username"].ToString().ToUpperInvariant())
    {
        //Do Something
    }
}
于 2010-06-25T15:53:06.647 に答える
0

これを試しましたか?

string userName = (string)drUser["Username"];
bool enrolled = enrolledUsers.Exists(x =>
  string.Equals(x.Name, userName, StringComparison.CurrentCultureIgnoreCase));

代わりにFindIndexを使用している理由はありますか?

于 2010-06-25T16:39:05.167 に答える
0

string.compareメソッドを試してください。 すべての過負荷

またはより具体的なもの

他に何もないとしても、私はそれが教育することを願っています。

于 2010-06-25T18:06:06.650 に答える