Unity 关于使用泛型方法和接口规范解析数据方法实现

本文展示了如何使用泛型方法和接口约束来简化代码并实现数据解析。通过定义一个接口IItemData,创建的泛型方法StringToList<T>限制了参数类型必须实现IItemData接口。在具体实现中,ChangeNum类继承了IItemData,并将解析后的数据填充到实例中。这种方法允许其他类只需继承IItemData接口就能复用此解析逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

在开发过程中,为了减少代码量,使用接口进行约束,最后完成数据的解析。实现的原理,泛型方法中对接口约束,只有继承目标接口的类可以使用,类中实现了接口方法,同时将解析好的数据装入模板类中,完成功能。其他有类似功能的实现,只需要继承目标接口即可。

using LitJson;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test28 : MonoBehaviour
{
    private  string tempString = "[[1,2],[4,9]]";
    // Start is called before the first frame update
    void Start()
    {
        var data= StringToList<ChangeNum>(tempString);
        for (int i=0;i<data.Count;i++)
        {
            Debug.LogError(data[i].ItemId+"<>"+data[i].ItemNum);
        }
    }
    private List<T> StringToList<T>(string reward) where T : IItemData,new ()
    {
        var jsonData = JsonMapper.ToObject<int[][]>(reward);
        var tempList = new List<T>(jsonData.Length);
        for (int i=0;i<jsonData.Length;i++)
        {
            var newT = new T();
            var data= jsonData[i];
            newT.ItemId = data[0];
            newT.ItemNum = data[1];
            tempList.Add(newT);
        }
        return tempList;
    }
    public interface IItemData
    {
        int ItemId { get; set; }
        int ItemNum{ get; set; }
    }
    public class ChangeNum : IItemData
    {
        public int ItemId { get ; set; }
        public int ItemNum { get ; set; }
    }
}

输出结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W低小调W

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值