목록에서 특정 요소를 찾는 방법?
내 응용 프로그램은 다음과 같은 목록을 사용합니다.
List<MyClass> list = new List<MyClass>();
이 메소드 Add
를 사용하면 다른 인스턴스 MyClass
가 추가됩니다.
MyClass
특히 다음과 같은 방법을 제공합니다.
public void SetId(String Id);
public String GetId();
방법을 MyClass
사용하여의 특정 인스턴스를 어떻게 사용 GetId
합니까? 나는 Find
방법 이 작동하는지 모르겠다?!
람다 식 사용
MyClass result = list.Find(x => x.GetId() == "xy");
참고 : C #에는 속성에 대한 기본 제공 구문이 있습니다. getter 및 setter 메소드를 작성하는 대신 (Java에서 익숙한 것처럼) 다음과 같이 작성하십시오.
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
value
기기에서 기기를 사용합니다. 속성에 할당 된 값을 나타냅니다.
이 패턴이 자주 사용되기 때문에 C #은 자동 구현 속성을 제공 합니다 . 위 코드의 짧은 버전입니다. 그러나 지원 변수는 숨겨져 있고 액세스 할 수 없습니다 (그러나 VB의 클래스 내에서 액세스 할 수 있음).
public string Id { get; set; }
필드에 액세스하는 것으로 간단히 속성을 사용할 수 있습니다.
var obj = new MyClass();
obj.Id = "xy"; // Calls the setter with "xy" assigned to the value parameter.
string id = obj.Id; // Calls the getter.
속성을 사용하여 다음과 같은 목록에서 항목을 검색합니다.
MyClass result = list.Find(x => x.Id == "xy");
읽기 전용 속성이 필요한 경우 자동 구현 속성을 사용할 수 있습니다.
public string Id { get; private set; }
이렇게하면 외부 Id
에서 접근 할 수 없습니다. 파생 클래스 설정을해야하는 경우 setter를 보호 할 수 있습니다.
public string Id { get; protected set; }
마지막으로 속성을 다음 virtual
과 같이 파생 파생 클래스에서 재정적으로 getter 및 setter에 대해 다른 구현을 제공 할 수 있습니다. 일반적인 가상 방법과 옵션.
C # 6.0 (Visual Studio 2015, Roslyn)부터는 인라인 이니셜 라이저로 getter 전용 자동 속성을 사용할 수 있습니다.
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
대신 생성자 내에서 getter 전용 속성을 초기화 할 수도 있습니다. Getter 전용 자동 속성은 개인 setter가있는 자동 구현 속성과 달리 진정한 읽기 전용 속성입니다.
이 읽기-쓰기 자동 속성 작동이 작동합니다.
public string Id { get; set; } = "A07";
C # 6.0부터는 속성을 식 본문 멤버로 사용 가능합니다.
public DateTime Yesterday => DateTime.Date.AddDays(-1); // Evaluated at each call.
// Instead of
public DateTime Yesterday { get { return DateTime.Date.AddDays(-1); } }
참조 : .NET 컴파일러 플랫폼 ( "Roslyn")
C # 6의 새로운 언어 기능
C # 7.0 부터는 getter와 setter 모두 내장되어 있습니다.
public string Name
{
get => _name; // getter
set => _name = value; // setter
}
이 경우 setter는 식이어야합니다. 전시가 될 수 없습니다. 위의 예는 C #에서 할당을 식이나 문으로 사용할 수 있기 때문에 작동합니다. 할당 식의 값은 할당 자체가 부작용 인 할당 된 값입니다. 당신이 한 번에 두 개 이상의 변수에 값을 할당 할 수 있습니다. : x = y = z = 0
에 해당 x = (y = (z = 0))
하는 것과 같은 효과가 있습니다 x = 0; y = 0; z = 0;
.
var list = new List<MyClass>();
var item = list.Find( x => x.GetId() == "TARGET_ID" );
하나만 있고 당신 또는이 원하는 것이 SingleOrDefault
될 수 있도록 강제하고 싶다면
var item = list.SingleOrDefault( x => x.GetId() == "TARGET" );
if ( item == null )
throw new Exception();
시험 :
list.Find(item => item.id==myid);
LINQ 확장을 사용할 수 있습니다 .
string id = "hello";
MyClass result = list.Where(m => m.GetId() == id).First();
또는 LINQ 를 사용하지 않으려는 경우 구식 방식으로 수행 할 수 있습니다.
List<MyClass> list = new List<MyClass>();
foreach (MyClass element in list)
{
if (element.GetId() == "heres_where_you_put_what_you_are_looking_for")
{
break; // If you only want to find the first instance a break here would be best for your application
}
}
익명 메서드 구문을 사용하여 작성된 조건자를 사용하면 문제를 가장 간결하게 해결할 수 있습니다.
MyClass found = list.Find(item => item.GetID() == ID);
public List<DealsCategory> DealCategory { get; set; }
int categoryid = Convert.ToInt16(dealsModel.DealCategory.Select(x => x.Id));
검색 기준을 유지하는 검색 변수를 만들 수 있습니다. 다음은 데이터베이스를 사용한 예입니다.
var query = from o in this.mJDBDataset.Products
where o.ProductStatus == textBox1.Text || o.Karrot == textBox1.Text
|| o.ProductDetails == textBox1.Text || o.DepositDate == textBox1.Text
|| o.SellDate == textBox1.Text
select o;
dataGridView1.DataSource = query.ToList();
//Search and Calculate
search = textBox1.Text;
cnn.Open();
string query1 = string.Format("select * from Products where ProductStatus='"
+ search +"'");
SqlDataAdapter da = new SqlDataAdapter(query1, cnn);
DataSet ds = new DataSet();
da.Fill(ds, "Products");
SqlDataReader reader;
reader = new SqlCommand(query1, cnn).ExecuteReader();
List<double> DuePayment = new List<double>();
if (reader.HasRows)
{
while (reader.Read())
{
foreach (DataRow row in ds.Tables["Products"].Rows)
{
DuePaymentstring.Add(row["DuePayment"].ToString());
DuePayment = DuePaymentstring.Select(x => double.Parse(x)).ToList();
}
}
tdp = 0;
tdp = DuePayment.Sum();
DuePaymentstring.Remove(Convert.ToString(DuePaymentstring.Count));
DuePayment.Clear();
}
cnn.Close();
label3.Text = Convert.ToString(tdp + " Due Payment Count: " +
DuePayment.Count + " Due Payment string Count: " + DuePaymentstring.Count);
tdp = 0;
//DuePaymentstring.RemoveRange(0,DuePaymentstring.Count);
//DuePayment.RemoveRange(0, DuePayment.Count);
//Search and Calculate
여기서 "var query"는 검색 변수를 통해 제공하는 검색 기준을 생성합니다. 그런 다음 "DuePaymentstring.Select"는 주어진 기준과 일치하는 데이터를 선택합니다. 이해하는 데 문제가 있으면 언제든지 물어보십시오.
참고 URL : https://stackoverflow.com/questions/9854917/how-can-i-find-a-specific-element-in-a-listt
'IT' 카테고리의 다른 글
WPF 별은 무엇을 소유하고 있는지 (Width = "100 *") (0) | 2020.08.14 |
---|---|
Google 크롬에서만 "모형 양식 제어" (0) | 2020.08.14 |
Visual C ++ 2008 Express 다운로드 링크가 죽었습니까? (0) | 2020.08.13 |
ptr이 NULL 인 free (ptr)는 메모리를 손상 시킵니까? (0) | 2020.08.13 |
Android-LinearLayout에서 TextView를 가로로 가운데 맞추기 (0) | 2020.08.13 |