using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace FindStr
{
public partial class Frm_Main : Form
{
public Frm_Main()
{
InitializeComponent();
}
private string[] G_str_array;//宣告一個陣列,尚未實體化及加入元素
private void Frm_Main_Load(object sender, EventArgs e)
{
//下面實體化並加入元素提供user查詢字串 有4個
G_str_array = new string[] {//為字串陣列欄位賦值
"明日科技","C#編程詞典","C#範例大全","C#範例寶典"};
//循環輸出字串到lable上 本範例lable叫lab_Message
for (int i = 0; i < G_str_array.Length; i++)
{
lab_Message.Text += G_str_array[i] + "\n";
}
}
//下面是一個textbox的觸發事件,每輸入一個字將觸發程式區塊
private void txt_find_TextChanged(object sender, EventArgs e)
{
if (txt_find.Text != string.Empty)//判斷搜尋字串是否為空
{
string[] P_str_temp = Array.FindAll//使用FindAll方法搜尋相應字串
(G_str_array, s => s.Contains(txt_find.Text));
if (P_str_temp.Length > 0)//判斷是否搜尋到相應字串
{
txt_display.Clear();//清空控制元件中的字串
foreach (string s in P_str_temp)//向控制元件中新增字串
{
txt_display.Text += s + Environment.NewLine;
}
}
else
{
txt_display.Clear();//清空控制元件中的字串
txt_display.Text = "沒有找到記錄";//提示沒有找到記錄
}
}
else
{
txt_display.Clear();//清空控制元件中的字串
}
}
需要注意的是 使用FindAll方法
中的第一個參數為 搜尋目標的陣列
第二個參數必須要是一個 Predicate<T>
這個Predicate<T>得意思是一個委派
而語法如下
public delegate bool Predicate<in T>(T obj)
注意的是傳回值是一個BOOL
也就是說我們也可以自訂函式只要傳回值是一個BOOL就好
所以上面範例使用Contains方法傳回直是Bool
比較S與txt_find.Text是否一樣是的話就回傳true
然後FindAll再回傳該陣列中的字
而需要注意的是通常, Predicate<T> 委派由 Lambda 運算式表示。
關於LAMBDA 下面有例子可以複習
delegate int count(int x, int y); //宣告一個委派叫COUNT
//宣告加減乘除的方法 傳回值是一個結果
private int ADDD(int x, int y)
{
return x + y;
}
private int CUT(int x, int y)//
{
return x - y;
}
private int XX(int x, int y)
{
return x * y;
}
private void button1_Click(object sender, EventArgs e)
{
//傳統委派實體化 帶入ADDD
count c1 = new count(ADDD);
//加入var 表示後面的count
var c2 = new count(CUT);
//值街只向xx方法 更精簡
count c3 = XX;
//使用匿名方式 不用指向任何方法
count c4 = delegate(int x, int y) { return x + y; };
//lambda方法
count c5 = (A, B) => A + B;
//宣告string空字串 放答案用
string ANSER = "";
//anser+=順便帶入參數
ANSER += c1(1, 1) + "\n";
ANSER += c2(1, 1) + "\n";
ANSER += c3(1, 1) + "\n";
ANSER += c4(1,1)+"\n";
ANSER += c5(1,1);
//show出
MessageBox.Show(ANSER);
//答案是2 0 1 2 2
沒有留言:
張貼留言