public delegate bool NumberPredicate(int number);
static void Main(string[] args)
{
Random rd = new Random();
int[] numbers = new int[15];
for (int i = 0; i < numbers.Length; i++)
numbers[i] = rd.Next(1, 100);
Console.WriteLine("原始数组:");
Array.ForEach(numbers, x => Console.Write($"{x} "));
Console.WriteLine();
//生成委托实例
NumberPredicate evenPredicate = IsEven;
//对数值5,利用委托变量来判断该值是否为偶数
Console.WriteLine("利用委托变量判断是否偶数: {0}", evenPredicate(5));
//选出偶数
int[] evenNumbers = FilterArray(numbers, evenPredicate);
//描述并输出
DisplayList("numbers数组中的偶数有 : ", evenNumbers);
//选出素数并输出
NumberPredicate primePredicate = IsPrime;
int[] primeNumbers = FilterArray(numbers, primePredicate);
//描述并输出
DisplayList("numbers数组中的素数有 : ", primeNumbers);
//模仿选出偶数、选出素数等操作,请自行用lambda表达式创建一个委托,并进行数据过滤与输出
NumberPredicate notevenPredicate = (number)=>number%2==1;
int[] notevenNumbers = FilterArray(numbers, notevenPredicate);
DisplayList("numbers数组中的奇数有 : ", notevenNumbers);
// [--d--]
Console.ReadKey();
}
//选择满足predicate的数组元素
private static int[] FilterArray(int[] intArray, NumberPredicate predicate)
{//可以运用动态数组List的知识。也可以写两个循环,先得到结果数组长度,再生成数组
List<int> list = new List<int>();
for (int i = 0; i < intArray.Length; i++)
{
if (predicate(intArray[i]))
{
list.Add(intArray[i]);
}
}
return list.ToArray();
}
private static bool IsPrime(int number)
{
for (int i = 2; i <= Math.Sqrt(number); i++)
{
if (number % i == 0)
{
return false;
}
}
return true;
}
private static bool IsEven(int number)
{
return (number % 2 == 0);
}
//打印description,并输出数组元素
private static void DisplayList(string description, int[] list)
{
Console.WriteLine(description);
foreach (int i in list)
{
Console.Write($"{i}\t");
}
Console.WriteLine();
}
C#作业:委托
最新推荐文章于 2021-12-24 14:42:42 发布