C# 怎么保存一个矩阵?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 怎么保存一个矩阵?相关的知识,希望对你有一定的参考价值。
你可以参考一下这个C#中几种换行符
2010-12-30 15:05
此部分为转载:winform 中 TextBox 的 Multiline属性设置为 true ,敲入几个字符和几个回车,然后保存到数据库,再从数据库中读取出来赋值给TextBox,换行符丢失。将读取出的字符串中的"\n"替换为"\r\n"解决问题。
1、TextBox 中换行符为: "\r\n"。
2、Windows 中的换行符(即:Environment.NewLine) 为 "\r\n"
3、MessageBox.Show() 的换行符为 "\n"
4、Console 的换行符为 "\n"
从数据库中读取出来后,换行符不知为啥变成 "\n","\r" 莫名的丢失了。为正确显示格式要将 "\n" 替换为 "\r\n"
换行符还因平台而已,Unix/Linux 平台换行符是 "\n"。
为保持平台的通用性,最好用 Environment.NewLine。
此部分为我的工作:要将矩阵保存到txt文件,可以用
using (StreamWriter sw = File.CreateText(path))
sw.WriteLine(aa);
aa这里为字符串,因为矩阵要换行,所以aa里要包括换行符,试了下上面的方法,这个"\r\n"可以用
拼接字符串的时候先判断是A*B的矩阵..然后到第A个的时候就输出一次换行就就得了. 参考技术A 建议你采用Json格式保存。Json格式为文本,比XML简洁。有成熟的第三方类库Json.net,在网上搜索Newtonsoft.Json.Net35.dll就可以了。 参考技术B 创建一个二维数组不就行了追问
我是问,怎么用C#命令讲一个结果矩阵保存到磁盘上
参考技术C C盘吧?追问C、D、E、F都行,如果你有移动硬盘,G、H、I、J也行
参考技术D c#序列化FxCop:将矩阵作为属性返回 (C#)
【中文标题】FxCop:将矩阵作为属性返回 (C#)【英文标题】:FxCop: Returning Matrix as Property (C#) 【发布时间】:2011-07-06 12:12:46 【问题描述】:我有一个静态类“默认值”,它应该保存默认矩阵,这些矩阵被转发到最后要求double[][]
的接口。到目前为止,我只是将返回 double[][]
s 的静态属性放在这个类中。
现在要使其符合我们公司的编码标准,代码必须符合 FxCop 的规则 CA1819,这将不允许我像以前那样从属性返回锯齿状数组。而不是数组,我将返回 IList
或 IEnumerable
(如讨论的 here)。
“足够公平”我想,所以我实现了返回IList<IList<double>>
的属性(尽管嵌套类型也很不酷)。但是,正如我所说,我需要使用的接口最后要求double[][]
矩阵。我不知道如何在不显式转换回每个列表的情况下将此列表列表转换为数组数组。当然,我可以,但这会产生大量开销,尤其是因为我什至不访问这些矩阵 - 我只是将它们传递给接口。
(PS:我知道,这是接口的错,但目前我们无法改变。)
编辑:我发现使用ILists<IList<double>>
无论如何都无济于事,因为它违反了CA1006。我采取的让 FxCop 闭嘴的简单解决方案是将属性设置为内部。无论如何,更好的解决方案如下所述。或者,可以考虑使用索引属性,不过这在 C# 中有点混乱。
【问题讨论】:
【参考方案1】:我建议,您创建一个类Matrix<T>
,将T[][]
接受到其构造函数中,并且可以转换为T[][]
,并使Defaults
中的属性返回Matrix<double>
实例。转换可以隐式、显式或使用方法实现。
【讨论】:
更好的是,创建一个 MatrixFxCop 规则的目的是防止 API 用户混淆,并提醒 API 作者他们是否真的想要这样做。
将数组作为属性返回可能会导致 API 使用者对内部数据结构造成严重破坏,这可能不是 API 作者的意图。
来自链接的规则:
属性返回的数组不受写保护,即使该属性是只读的。为了保持数组防篡改,该属性必须返回数组的副本。通常,用户不会理解调用此类属性对性能的不利影响。具体来说,他们可能会将属性用作索引属性。
他们推荐的返回数组的方法之一是将 Xxx 属性更改为 GetXxx() 方法。
这对你来说可能吗?
【讨论】:
我认为 FxCop 会抱怨您应该将 Get 更改为属性:) 是的,这有点脑残,但希望人们可以忽略这种违规行为。 FxCop 不是盲目追随的。 嗯,是的,可能,但我可以(非法)首先忽略 CA1819。实际上:我只是将所有默认值设置为内部,不是很漂亮,但无论如何。实际上可以通过接口本身访问默认值,因此这个 Defaults 类没有必要公开。 好吧,那么我会说 FxCop 正在做它的工作。该工具的全部意义在于迫使您考虑您的公共 API。您注意到 Defaults 不应该是公开的,这对您的 API 更好,并消除了 FxCop 违规。内部是一个非常强大的概念,应该在框架中经常使用。这绝对不是“不漂亮”。 :)以上是关于C# 怎么保存一个矩阵?的主要内容,如果未能解决你的问题,请参考以下文章