小编Fra*_*ome的帖子

编码不是枚举吗?

我试图找出一种方法来存储数据库中的文件编码,然后能够将其检索回原始类型(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类型?提前感谢您提供的任何帮助.

c# enums encoding

5
推荐指数
1
解决办法
3809
查看次数

将"原始"XML字符串插入XElement

我正在尝试将节点(以字符串格式)加载到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">&lt;mynamespace:node&gt;node text&lt;/node&gt;</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)

有一个巧妙的方法来做到这一点?

提前致谢

c# linq xelement

4
推荐指数
1
解决办法
3088
查看次数

两个列表的交集与重复

我正在尝试创建一个函数,它会给我两个列表的交集,考虑到可以有重复的项目,我需要它们在输出中.

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)

并且每次递归调用都会发生这种情况.任何想法或想法将非常感激.谢谢.

c# intersection list

0
推荐指数
1
解决办法
249
查看次数

标签 统计

c# ×3

encoding ×1

enums ×1

intersection ×1

linq ×1

list ×1

xelement ×1