gpt4 book ai didi

任意大小的 C# ValueTuple

转载 作者:行者123 更新时间:2023-11-30 15:14:03 25 4
gpt4 key购买 nike

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

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

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;
}

关于任意大小的 C# ValueTuple,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56413583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com