using System.Text;

namespace Dpz.Core.Service.ObjectStorage.VideoHandle;

/// <summary>
/// 视频处理参数
/// </summary>
public class AvOpts : List<OptionType>
{
    private const int MaxCount = 10;

    public AvOpts() { }

    public AvOpts(ICollection<OptionType> items)
    {
        AddRange(items);
    }

    public new void Add(OptionType item)
    {
        if (Count >= MaxCount)
        {
            throw new InvalidOperationException("The maximum number of items has been reached.");
        }
        base.Add(item);
    }

    public void AddRange(ICollection<OptionType> items)
    {
        var c = Math.Max(MaxCount - Count, 0);
        if (c > 0)
        {
            base.AddRange(items.Take(c));
        }
    }

    public override string ToString()
    {
        var sb = new StringBuilder();
        foreach (var item in this)
        {
            var value = item.Value switch
            {
                bool bv => bv.ToString().ToLower(),
                null => "",
                _ => item.Value.ToString()
            };
            sb.Append($"/{item.Name}/{value}");
        }
        return sb.ToString();
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这段代码定义了一个名为 AvOpts 的类,用于处理视频处理参数。让我来详细解释一下:

类的基本结构

public class AvOpts : List<OptionType>

AvOpts 继承自 List<OptionType>,是一个专门用于存储视频处理选项的集合类。

主要特性

1. 容量限制

private const int MaxCount = 10;

定义了最大容量为10个选项,防止参数过多。

2. 构造函数

  • 无参构造函数:创建空的选项集合
  • 带参构造函数:接受一个 ICollection<OptionType> 并添加到集合中

3. 重写的 Add 方法

public new void Add(OptionType item)
{
    if (Count >= MaxCount)
    {
        throw new InvalidOperationException("The maximum number of items has been reached.");
    }
    base.Add(item);
}
  • 使用 new 关键字隐藏基类的 Add 方法
  • 在添加前检查是否超过最大容量
  • 超过限制时抛出 InvalidOperationException 异常

4. 自定义的 AddRange 方法

public void AddRange(ICollection<OptionType> items)
{
    var c = Math.Max(MaxCount - Count, 0);
    if (c > 0)
    {
        base.AddRange(items.Take(c));
    }
}
  • 计算剩余可添加的容量
  • 只添加不超过剩余容量的项目
  • 使用 Take(c) 截取前 c 个元素

5. 重写的 ToString 方法

public override string ToString()
{
    var sb = new StringBuilder();
    foreach (var item in this)
    {
        var value = item.Value switch
        {
            bool bv => bv.ToString().ToLower(),
            null => "",
            _ => item.Value.ToString()
        };
        sb.Append($"/{item.Name}/{value}");
    }
    return sb.ToString();
}

这个方法将所有选项格式化为字符串:

  • 使用模式匹配 (switch 表达式) 处理不同类型的值
  • bool 类型转换为小写字符串
  • null 值转换为空字符串
  • 其他类型调用 ToString() 方法
  • 最终格式为:/选项名1/值1/选项名2/值2...

使用场景

这个类主要用于:

  1. 视频处理参数管理:存储和管理视频处理的各种选项
  2. 参数序列化:通过 ToString() 方法将参数转换为特定格式的字符串
  3. 容量控制:确保参数数量不会过多,避免性能问题

设计优点

  1. 类型安全:继承自泛型集合,提供类型安全
  2. 容量控制:防止参数过多导致的性能问题
  3. 灵活的字符串化:支持多种数据类型的格式化
  4. 易于使用:提供了便捷的构造和添加方法
评论加载中...