.NET零碎API

  1. 转化成浮点数组
	progressBar.GetComponent<ProgressBar>().InitWithFlag((float[])flags.ToArray(typeof(float)));
  1. 枚举增加
	current = (bill)Mathf.Clamp((int)current, 0, 2);
  1. StringBuilder添加
        StringBuilder sb = new StringBuilder();
        sb.AppendFormat("<color=red>{0}</color>\n\n", item.Name);
  1. ?? 除了是可空类型,还是可转换的引用类型的缺值
  2. Qframework有可选参数,以冒号来搞的
  3. 链表的使用
        LinkedList<int> bill = new LinkedList<int>();
        bill.AddFirst(4);
        bill.AddLast(1);
        bill.AddLast(8);
        bill.AddLast(4);
        bill.AddLast(5);

        LinkedList<int> bill2 = new LinkedList<int>();
        bill2.AddFirst(5);
        bill2.AddLast(0);
        bill2.AddLast(1);
        bill2.AddLast(8);
        bill2.AddLast(4);
        bill2.AddLast(5);

        LinkedListNode<int> cur = bill.Find(8);
        bill.AddBefore(cur, 2);
        bill.Remove(2);

        foreach (var item in bill)
        {
            print(item);
        }
  1. 读《深入理解C#》第一遍一些实验(没精简)
        //更简洁
        Person person = new Person { Name = "Tom", Age = 9 };
        print(person.Name);

        Go(new[] { 1, 2, 3 });

        //匿名类型
        var bill = new { name = "sk", age = 9 };

        //表达式树
        Expression firstArg = Expression.Constant(2);
        Expression secondArg = Expression.Constant(3);
        Expression add = Expression.Add(firstArg, secondArg);
        Func<int> compiled = Expression.Lambda<Func<int>>(add).Compile();
        print(compiled());

        Expression<Func<int>> return5 = () => 5;

        var collection = Enumerable.Range(0, 10);
        foreach (var item in collection)
        {
            print(item);
        }

        //Cast和OfType语句
        ArrayList list = new ArrayList { "First", "Second", "Third" };
        IEnumerable<string> strings = list.Cast<string>();
        foreach (var item in strings)
        {
            print(item);
        }

        ArrayList list = new ArrayList { 1, "not an int", 2, 3 };
        IEnumerable<int> ints = list.OfType<int>();
        foreach (var item in ints)
        {
            print(item);
        }  
  1. 数据结构和接口总结等
    private void Start()
    {
        IEnumerable<T> 是表,IEnumerator<T> 是游标
        父子关系 IEnumerable是曾祖父 IEnumerable<T> 是祖父 ICollection是父亲 IList, ISet, IDictionary是孩子

        List相关 ConvertAll列表投影,FindAll对原始列表过滤
        List<int> list = new List<int>();
        如果列表已经按值正确排序,比IndexOf更有效率
        list.BinarySearch(32);

        数组支持协变

        LinkedList<T> 还是使用AddFirst和AddLast;

        不常见的还有很多比如KeyedCollection<Tkey, TItem>

        在字典中使用自定义健比较器
        var comparer = StringComparer.OrdinalIgnoreCase;
        var dict = new Dictionary<String, int>(comparer);
        dict["TEST"] = 10;
        print(dict["test"]);


        SortedList<Tkey, Tvalue> 和 sortedDictionary<Tkey, Tvalue> 两个类型都是是字典
        前者维护数组,后者是红黑树结构

        ReadOnlyDictionary<Tkey, TValue>(set)验证集 SetEquals Overlaps IsSubsetOf IsSupersetOf IsProperSubsetOf IsProperSupersetOf

        HashSet<T> 是不含值的Dictionary, 可以指定一个IEqualityComparer< T > 来自定义项的比较
        HashSet<T> 添加了一个RemoveWhere方法,可以移除所有匹配给定谓词的条目,这可以在迭代时对集进行删减

        SortedSet<T> 是没有值的SortedDictionary<,>, 还有一个GetViewBetween方法

        Queue本质是数组,Stack可以想象成一个List<T>

        并行集合 和 只读接口省略
    }

  1. Enum.IsDefined返回一个布尔值,该值指示给定的整数值或其名称字符串是否存在于指定的枚举中。
  2. 委托如果为Null执行会报错,字典key变为Null,数量不会改变的,所以需要自己手动移除
  3. await一些使用心得
    async void Start()
    {
        await Task.Delay(TimeSpan.FromSeconds(3));
        await Print();
        print(Time.time);
    }

    async Task Print()
    {
        await Task.Delay(TimeSpan.FromSeconds(2f));
        print("ppp");
    }

public static class TaskExtensions
{
    public static IEnumerator AsIEnumerator(this Task task)
    {
        while (!task.IsCompleted)
        {
            yield return null;
        }

        if (task.IsFaulted)
        {
            throw task.Exception;
        }
    }
}

public class Test : MonoBehaviour
{

    public void Start()
    {
        StartCoroutine(Run());
    }

    IEnumerator Run()
    {
        yield return RunAsync().AsIEnumerator();
    }

    async Task RunAsync()`在这里插入代码片`
    {
        await Task.Delay(TimeSpan.FromSeconds(3f));
        Debug.Log(Time.time);
    }
}

  • 虚属性可以只写一半哦
    protected override int CurrentVal
        {
            set
            {
                base.CurrentVal = value;
                Incident.SendEvent(new HelaEvent(){Hel =base.CurrentVal});
            }
        }

  • 由于C#的枚举不允许被继承(但允许继承自int/float等类型)。
  • 接口矩阵见过没有?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值