这篇文章主要介绍“c#中Delegate,Action,Func和Predicate怎么使用”,在日常操作中,相信很多人在c#中Delegate,Action,Func和Predicate怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c#中Delegate,Action,Func和Predicate怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1.Delegate,Action(常用)
#region 模块信息
// **********************************************************************
// Copyright (C) 2018 Blazors
// Please contact me if you have any questions
// File Name: GameDefine
// Author: romantic123fly
// We
// **********************************************************************
#endregion
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public delegate void MyDelegate(string name);//定义委托
public delegate void Action();
public delegate void Action<T>(T obj);
public delegate void Action<T1, T2>(T1 arg1, T2 arg2);
public class ActionTest : MonoBehaviour {
public MyDelegate myDelegate; //使用委托
Action action;
Action<string> action1;
Action<string, int> action2;
Action<string[]> action3;
void Start()
{
myDelegate += DelegateFun;
myDelegate("myDelegate");
action += test1;//无参数
action();
action1 += test2;//一个参数
action1("Test2");
action2 += test3;//两个参数
action2("Test3", 99);
action3 += test4;//集合参数
action3(new string[] { "charlies", "nancy", "alex", "jimmy", "selina" });
}
private void DelegateFun(string name)
{
Debug.Log(name);
}
void test1()
{
Debug.Log("test1");
}
void test2(string str)
{
Debug.Log(str);
}
void test3(string str,int num)
{
Debug.Log(string.Format("{0} {1}", str, num));
}
void test4(string[] x)
{
var result = from o in x where o.Contains("s")select o;
foreach (string s in result.ToList())
{
Debug.Log(s);
}
}
}
Func可以传入多个参数,默认最后一个为返回值
Predicate只能接受一个传入参数,返回值为bool类型
#region 模块信息
// **********************************************************************
// Copyright (C) 2018 Blazors
// Please contact me if you have any questions
// File Name: GameDefine
// Author: romantic123fly
// WeChat
// **********************************************************************
#endregion
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
//有返回值的委托
public delegate TResult Func<TResult>();
public delegate TResult Func<T, TResult>(T arg);
public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);
public class FuncTest : MonoBehaviour
{
Func<int> func;
Func<string, int> func1;
Predicate<string[]> predicate;
void Start()
{
func = XXX;
Debug.Log(func());
func1 = CallStringLength;
Debug.Log(func1("sadasdads"));
///bool Predicate<T>的用法
///输入一个T类型的参数,返回值为bool类型
predicate = func2;
string[] _value = { "charlies", "nancy", "alex", "jimmy", "selina" };
Debug.Log(predicate(_value));
}
private bool func2(string[] obj)
{
var result = from p in obj
where p.Contains("s")
select p;
if (result.ToList().Count > 0)
{
return true;
}
else
{
return false;
}
}
int XXX()
{
return 10;
}
int CallStringLength(string str)
{
return str.Length;
}
}
到此,关于“c#中Delegate,Action,Func和Predicate怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://blog.51cto.com/huanshj/5722617