繁体   English   中英

任意大小的 C# ValueTuple

[英]C# ValueTuple of any size

是否可以编写一个 C# 方法来接受具有任意数量的相同类型项的值元组并将它们转换为列表?

编辑 2/6/2019我接受了提供的答案作为正确答案。 我还想提供一个使用基类而不是接口的解决方案,因为我正在尝试编写一个转换运算符,并且不允许从接口进行用户定义的转换。

public static class TupleExtensions
{
    public static IEnumerable<object> Enumerate(this ValueType tpl)
    {
        var ivt = tpl as ITuple;
        if (ivt == null) yield break;

        for (int i = 0; i < ivt.Length; i++)
        {
            yield return ivt[i];
        }
    }
}

您可以利用 ValueTuples 实现ITuple接口这一事实。

唯一的问题是元组元素可以是任意类型,因此列表必须接受任何类型。

public List<object> TupleToList(ITuple tuple)
{
  var result = new List<object>(tuple.Length);
  for (int i = 0; i < tuple.Length; i++)
  {
    result.Add(tuple[i]);
  }
  return result;
}

这也可用作扩展方法:

public static class ValueTupleExtensions
{
  public static List<object> ToList(this ITuple tuple)
  {
    var result = new List<object>(tuple.Length);
    for (int i = 0; i < tuple.Length; i++)
    {
      result.Add(tuple[i]);
    }
    return result;
  }
}

这样就可以写var list = (123, "Text").ToList(); .

编辑 2020-06-18:如果元组的每个元素都是相同类型,则可以创建具有正确元素类型的列表:

public List<T> TupleToList<T>(ITuple tuple)
{
  var result = new List<T>(tuple.Length);
  for (int i = 0; i < tuple.Length; i++)
  {
    result.Add((T)tuple[i]);
  }
  return result;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM