2010-10-13 41 views
44

tôi có mã này:tìm thấy nếu một số nguyên tồn tại trong một danh sách các số nguyên

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 

dường như luôn luôn trả về false mặc dù các con số không phù hợp với

bất kỳ ý tưởng?

+9

Không, đó là khá nhiều cách bạn làm điều đó. – mquander

+0

mquander là đúng - có lẽ bạn có thể thử một ví dụ nhỏ như Danh sách foo = new List (); cho (int i = 0; i <10; ++ i) {foo.Thêm (i); } Console.WriteLine (foo.Contains (2)); –

+0

Tôi đoán rằng bạn có một lỗi ở nơi khác. Cách tiếp cận đó NÊN làm việc. –

Trả lời

68

Nếu bạn chỉ cần một kết quả đúng/sai

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

nếu intVariable không tồn tại trong danh sách nó sẽ trở lại -1

+1

'IndexOf' là không dựa trên. Đó nên là '> = 0' :) –

+5

Hoặc thực sự nó chỉ nên kiểm tra'! = -1' vì giá trị trả về -1 được định nghĩa là kết quả âm. –

+0

cảm ơn nhận xét, điểm tốt –

45

Chừng danh sách của bạn được khởi tạo với giá trị và giá trị mà thực sự tồn tại trong danh sách, sau đó Chứa phải trả về true.

tôi thử như sau:

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

Và tồn tại thực sự được thiết lập là true.

+0

OP đã cập nhật câu hỏi của mình mà bạn trả lời. danh sách id của anh ấy dường như không được khởi tạo. Không nên đó là một trình biên dịch bắt? –

+0

Vâng. Một danh sách uninitialized nên gây ra một lỗi trình biên dịch. Nhưng không nếu danh sách được định nghĩa ở cấp lớp, thì nó sẽ được khởi tạo thành null và trình biên dịch sẽ được hạnh phúc. –

3

Cách bạn đã làm là chính xác. Nó hoạt động tốt với mã đó: x là đúng. có thể bạn đã phạm sai lầm ở một nơi khác.

List<int> ints = new List<int>(new[] {1,5,7}); 
var i = 5; 
var x = ints.Contains(i); 
0

Bạn nên tham chiếu Selected không phải là ids.Contains làm dòng cuối cùng.

Tôi vừa nhận ra đây là vấn đề định dạng, từ OP. Bất kể bạn nên tham khảo giá trị trong Đã chọn. Tôi khuyên bạn nên thêm một số cuộc gọi Console.WriteLine để xem chính xác những gì đang được in ra trên mỗi dòng và cũng là những gì mỗi giá trị được.

Sau khi cập nhật: id là danh sách trống, cách này không ném NullReferenceException? Vì nó chưa bao giờ được khởi tạo trong khối mã

3

Đây là một phương thức mở rộng, điều này cho phép mã hóa như lệnh 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); 
} 

Điều này cho phép những thứ như thế:

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

Hoặc:

int i = 5; 
bool isIn = i.In(1,2,3,4,5); 
1
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; 
} 
Các vấn đề liên quan