gpt4 book ai didi

c# - C# 扩展方法中的 Lambda

转载 作者:太空狗 更新时间:2023-10-29 22:30:58 25 4
gpt4 key购买 nike

假设我想编写一个扩展方法来将一些数据从 T[,] 转储到 CSV:

public static void WriteCSVData<T>(this T[,] data, StreamWriter sw)
{
for (int row = 0; row < data.GetLength(0); row++)
for (int col = 0; col < data.GetLength(1); col++)
{
string s = data[row, col].ToString();

if (s.Contains(","))
sw.Write("\"" + s + "\"");
else
sw.Write(s);

if (col < data.GetLength(1) - 1)
sw.Write(",");
else
sw.WriteLine();
}
}

我可以调用它

using (StreamWriter sw = new StreamWriter("data.csv"))
myData.WriteCSVData(sw);

但是假设 myData 是一个 Complex[,] 并且我想写复数的大小,而不是完整的值。如果我能写的话会很方便:

using (StreamWriter sw = new StreamWriter("data.csv"))
myData.WriteCSVData(sw, d => d.Magnitude);

但我不确定如何在扩展方法中实现它,或者它是否可能。

最佳答案

您可以像这样重载现有方法:

public static void WriteCSVData<T, TValue>(this T[,] data, StreamWriter sw, 
Func<T,TValue> func)
{
for (int row = 0; row < data.GetLength(0); row++)
for (int col = 0; col < data.GetLength(1); col++)
{
string s = func(data[row, col]).ToString();

if (s.Contains(","))
sw.Write("\"" + s + "\"");
else
sw.Write(s);

if (col < data.GetLength(1) - 1)
sw.Write(",");
else
sw.WriteLine();
}
}

并按照您想要的方式使用它:

using (StreamWriter sw = new StreamWriter("data.csv"))
myData.WriteCSVData(sw, d => d.Magnitude);

关于c# - C# 扩展方法中的 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25842092/

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