我试图找出一种方法来存储数据库中的文件编码,然后能够将其检索回原始类型(System.Text.Encoding).但我得到一个我不明白的错误.
作为测试,我创建了这个小程序来重现错误:
using System;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
object o = Encoding.Unicode;
Encoding enc = (Encoding) Enum.Parse(typeof(Encoding), o.ToString());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在Parse专线中得到的例外说:
Type provided must be an Enum.
Parameter name: enumType
Run Code Online (Sandbox Code Playgroud)
那么,基本上据我所知,告诉我typeof(Encoding)不会返回Enum类型?提前感谢您提供的任何帮助.
我正在尝试将节点(以字符串格式)加载到XElement中.虽然这应该很容易,但我发现了一些问题:
XElement.Load()或Xelement.Parse()我得到预期的未定义的命名空间错误我知道解决方案是使用命名空间定义创建一个周围的节点,然后加载整个东西,但我想知道是否有一个更优雅的解决方案,不涉及字符串操作.
这是我失败的尝试:(
我有一组命名空间属性:
private readonly List<XAttribute> _namespaces;
Run Code Online (Sandbox Code Playgroud)
这已经填充并包含所有必要的命名空间.因此,要将我的XML字符串嵌入另一个节点,我这样做:
var temp = new XElement("root", (from ns in _namespaces select ns), MyXMLString);
Run Code Online (Sandbox Code Playgroud)
但正如我所预料的那样,MyXMLString的内容会被转义并成为文本节点.我得到的结果是:
<root xmlns:mynamespace="http://mynamespace.com"><mynamespace:node>node text</node></root>
Run Code Online (Sandbox Code Playgroud)
我正在寻找的结果是:
<root xmlns:mynamespace="http://mynamespace.com">
<mynamespace:node>node text</node>
</root>
Run Code Online (Sandbox Code Playgroud)
有一个巧妙的方法来做到这一点?
提前致谢
我正在尝试创建一个函数,它会给我两个列表的交集,考虑到可以有重复的项目,我需要它们在输出中.
Console.Write((new[] {1, 2, 2, 3}).Intersect(new[] {1, 2, 2}));
Run Code Online (Sandbox Code Playgroud)
只输出{1,2},我需要的输出是{1,2,2}.
这是我创建的方法:
private static IEnumerable<int> IntersectWithRepetitons(List<int> a, List<int> b)
{
if (!a.Any() || !b.Any()) return Enumerable.Empty<int>();
if (a.Count() > b.Count()) return IntersectWithRepetitons(b, a);
var idx = b.IndexOf(a.First());
if (idx < 0) return IntersectWithRepetitons(b, a.Skip(1).ToList());
var tmp1 = new List<int> { a.First() };
var tmp2 = new List<int>(b);
tmp2.RemoveAt(idx);
return tmp1.Concat(IntersectWithRepetitons(tmp2, a.Skip(1).ToList()));
}
Run Code Online (Sandbox Code Playgroud)
我确信这可以高度优化但是,我主要担心(效率明智)是为了保持输入列表完好无损,当我从中删除找到的项目时,我必须复制'b'列表:
var tmp2 = new List<int>(b);
tmp2.RemoveAt(idx);
Run Code Online (Sandbox Code Playgroud)
并且每次递归调用都会发生这种情况.任何想法或想法将非常感激.谢谢.