web-dev-qa-db-ja.com

整数のリストに整数が存在するかどうかを調べる

私はこのコードを持っています:

  List<T> apps = getApps();

        List<int> ids;

        List<SelectListItem> dropdown = apps.ConvertAll(c => new SelectListItem
        {
            Selected = ids.Contains(c.Id),
            Text = c.Name,
            Value = c.Id.ToString()
        }).ToList();


ids.Contains

数字が一致しても、常にfalseを返すようです

何か案は?

56
leora

真/偽の結果が必要な場合

bool isInList = intList.IndexOf(intVariable) != -1;

intVariableがリストに存在しない場合、-1を返します

86
Bobby Borszich

リストが値で初期化され、その値がリストに実際に存在する限り、Containsはtrueを返す必要があります。

私は次を試しました:

var list = new List<int> {1,2,3,4,5};
var intVar = 4;
var exists = list.Contains(intVar);

そして、existsは実際にtrueに設定されます。

68
Rune Grimstad

あなたのやり方は正しいです。そのコードで正常に動作します:xはtrueです。おそらくあなたはどこかで間違いを犯したでしょう。

List<int> ints = new List<int>( new[] {1,5,7}); // 1

List<int> intlist=new List<int>() { 0,2,3,4,1}; // 2

var i = 5;
var x = ints.Contains(i);   // return true or false
6
gsharp

拡張メソッドを次に示します。これにより、SQL INコマンドのようなコーディングが可能になります。

public static bool In<T>(this T o, params T[] values)
{
    if (values == null) return false;

    return values.Contains(o);
}
public static bool In<T>(this T o, IEnumerable<T> values)
{
    if (values == null) return false;

    return values.Contains(o);
}

これにより、次のようなことが可能になります。

List<int> ints = new List<int>( new[] {1,5,7});
int i = 5;
bool isIn = i.In(ints);

または:

int i = 5;
bool isIn = i.In(1,2,3,4,5);
6
Dennis

最高のコードと完全なコードはこちらです。

NumbersList.Exists(p => p.Equals(Input)

つかいます:

List<int> NumbersList = new List<int>();
private void button1_Click(object sender, EventArgs e)
{
    int Input = Convert.ToInt32(textBox1.Text);
    if (!NumbersList.Exists(p => p.Equals(Input)))
    {
       NumbersList.Add(Input);
    }
    else
    {
        MessageBox.Show("The number entered is in the list","Error");
    }
}
2
danialafshari
bool vExist = false;
int vSelectValue = 1;

List<int> vList = new List<int>();
vList.Add(1);
vList.Add(2);

IEnumerable vRes = (from n in vListwhere n == vSelectValue);
if (vRes.Count > 0) {
    vExist = true;
}
1
sv88erik

最終行としてids.ContainsではなくSelectedを参照する必要があります。

私はこれがOPのフォーマットの問題であることを認識しました。いずれにしても、Selectedの値を参照する必要があります。 Console.WriteLine呼び出しをいくつか追加して、各行に何が印刷され、各値が何であるかを正確に確認することをお勧めします。

更新後:idsは空のリストですが、これはどのようにNullReferenceExceptionをスローしないのですか?そのコードブロックでは初期化されなかったため

0
Woot4Moo