小编Rob*_*d70的帖子

迭代Flags Enum中的值?

如果我有一个包含标志枚举的变量,我可以以某种方式迭代该特定变量中的位值吗?或者我是否必须使用Enum.GetValues迭代整个枚举并检查哪些枚举?

c# enums enum-flags

123
推荐指数
8
解决办法
6万
查看次数

后增量x乘n(n!= 1)

所以,如果我执行以下代码......

int x = 0;
Debug.WriteLine(x++);
Debug.WriteLine(x += 4);
Debug.WriteLine(x);
Run Code Online (Sandbox Code Playgroud)

......我分别得到0,5和5.我想得到的是0,1和5.在C#中有没有办法用n进行后递增?或者我必须写出+ =作为自己的陈述?

仅仅是为了上下文,我实际上正在做的是缓冲区上的一堆BitConverter操作,并且将每个操作作为一个自给自足的语句非常好,其中偏移量增加了数据类型的大小.转换成.这样,如果稍后更改缓冲区格式,我可以添加或删除一行,而不必担心任何周围的代码.

c# post-increment

10
推荐指数
1
解决办法
247
查看次数

可能返回数组的通用属性是否可接受?

根据http://msdn.microsoft.com/en-US/library/0fss9skc(v=vs.120).aspx,属性不应返回数组.这如何与泛型相互作用?如果数组是允许的类型为一个通用的,我应该做的功能,如T GetValue()SetValue(T value),而不是T Value { get; set; }

c# generics

6
推荐指数
1
解决办法
97
查看次数

实现"后备"类

我有一组类,每个类都需要在某个时候决定他们应该在内部使用哪两种或三种方法在外部实现相同的功能.理想情况下,这应该包括回退功能,如果ApproachA失败,它会通过尝试ApproachB(并且可能接近C,D等).到目前为止,我一直在使用类似的编码if (!success) { ApproachB code }.这样做的问题是,后面的几个方法也需要知道选择了哪种方法,并且所有这些方法都要开发自己的if (MethodChosen) { } else { }语句.我真的想用一些不那么笨拙的东西来解决这个问题......除了我认为的其他选择似乎都不那么"狡猾".以下是我想到的三种方法:

  1. 实现一个静态.Create方法,该方法决定要创建两个派生类中的哪一个,其中两个类具有支持它们的接口.这样做的缺点是你写了很多相同的代码两次,而且它并没有真正创建一个"后备",因为它强制所有的决策都是在.Create方法中预先完成的.这应该可以工作9/10次,但是只有当主要尝试失败时,还有其他的1/10我希望后备才能启动.
  2. 与上面相同,但涉及基类或抽象类,要么作为两者的支持类,要么使用primary作为回退的基类.这具有相同的后备缺点,但至少很少或没有重复的代码.
  3. 使用可在运行时更改的子类实现通常构造的抽象类:即

    public void SomeMethodOrConstructor()
    {
        if (someConditions)
            MyChild = ChildClassA;
        else
            MyChild = ChildClassB;
    }
    
    
    public void Execute()
    {
        MyChild.Execute();
    }
    
    Run Code Online (Sandbox Code Playgroud)

选项3的问题是在需要时在两者之间传递数据.由于这些方法中的一些是在对象之外进行建模,因此这将是相当频繁的.嵌套类是否自动与父类共享数据?或者我是否必须在每次通话时都通过?

还有什么我应该考虑的吗?


更新:第一堂课正在运行责任链.目前,我选择在方法执行期间不使用策略模式或回退,因为我认为最终可能没有必要.我认为大多数这样的执行后备实际上会更好地保留在他们自己的课程中,因为不会完全改变游戏规划,只需要进行一些小的调整即可.如果结果不是这样,我至少知道我现在需要调查的是什么.

感谢所有帮助最终解决方案的人!

对于好奇,我的终极解决方案大致如下:

  • 创建处理程序抽象类,几乎与维基百科文章中所述,但有一个 public abstract Handler GetHandler()函数,并添加其他抽象方法,如Load,Save等.
  • 为父类实现私有处理程序子类(它们也可能是子类,因为它们只处理该特定类的事物......避免以后命名问题).子类都在其构造函数中获取父对象类型的参数,因此可以轻松访问父项的数据.
  • 从父类的构造函数中,设置Chain of Responsibility处理程序/后继程序(再次,就像示例一样),然后调用FirstHandler.GetHandler(this)并存储结果,以便类知道将来使用哪个处理程序.
  • 大多数处理方法然后简单地减少到Handler.MethodName().

c# modeling

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

带可替换项目的键控收藏

到目前为止,我一直在使用KeyedCollection创建大型对象集合(接近一百万),每个对象都有一个uint ID字段作为集合的键。太好了,但是现在在扩展功能时遇到了一个问题:我具有“覆盖”记录,需要用新项替换具有相同键的任何现有项。平均而言,可能会覆盖20条记录中的1条,对于同一条记录,甚至可以多次重写。

我不介意在必要时从KeyedCollection进行重构。我最好的选择是什么?字典<>?这些ID不是顺序的,因此可以直接索引。

c# collections

5
推荐指数
2
解决办法
1104
查看次数

准备要发布的源代码

这里有点新手问题.

在VC#2010 Express中,是否有一种简单的方法来准备要发布的源代码?换句话说,删除任何不应发布的文件,如密钥文件,用户特定设置等.

如果没有,有人能指出我的清单或那种性质的东西吗?

c# release

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

XPathNavigator帮助

这是我正在使用的XML示例(可从任何wiki的Special:Export/SomePage结果中检索):

<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.4/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.4/ http://www.mediawiki.org/xml/export-0.4.xsd" version="0.4" xml:lang="en"> 
  <siteinfo> 
    <sitename>Wikipedia</sitename> 
    <base>http://en.wikipedia.org/wiki/Main_Page</base> 
    <generator>MediaWiki 1.16wmf4</generator> 
    <case>first-letter</case> 
    <namespaces> 
      <namespace key="-2" case="first-letter">Media</namespace> 
      <namespace key="-1" case="first-letter">Special</namespace> 
      <namespace key="0" case="first-letter" /> 
      ...
    </namespaces> 
  </siteinfo> 
</mediawiki> 
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有我能想到的东西,直接"跳转"到siteinfo节点并迭代结果,除非我从根目录手动浏览每个子节点,否则没有任何作用.我已经尝试了各种各样的.Move*和.Select*方法的百万种变化,看起来我只是把头靠在墙上,但我现在的变体看起来像这样:

StringReader strr = new StringReader(_rawData);
XPathDocument xd = new XPathDocument(XmlReader.Create(strr, Bot.XmlReaderSettings));
XPathNavigator xn = xd.CreateNavigator();
XPathNodeIterator xni = xn.Select("/mediawiki/siteinfo");
foreach (XPathNavigator nav in xni)
    Console.WriteLine(nav.LocalName);
Run Code Online (Sandbox Code Playgroud)

这不会返回任何结果.我究竟做错了什么?

c# xml xpath xpathnavigator

3
推荐指数
1
解决办法
2674
查看次数

使用XPathNavigator检测空XML节点属性的存在

有没有一种简单的方法来检测XPathNavigator XML节点上是否存在属性(例如<node>vs. <node attribute="">)?Node.GetAttribute无论如何返回一个空字符串.我唯一能想到的就是检查Node.OuterXML房产,这看起来真的很愚蠢.

(注意:节点实际上不是空的,所以我不能只使用Node.HasAttributes.)

.net xpath

2
推荐指数
1
解决办法
1434
查看次数

字典铸造

是否可以将枚举键字典转换为整数字典?(或者复制构造函数也适用于我正在做的事情.)换句话说,看起来像:

Dictionary<int, string> NewDictionary =
    (Dictionary<int, string>)OldDictionary<MyEnum, string>;
Run Code Online (Sandbox Code Playgroud)

(是的,我知道语法不太正确,只是为了表明我来自哪里.)

c# generics dictionary

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

加入智能分离器

当然,编写起来很容易,但是在C#2010中,是否有内置的Join(或类似)方法,如果前一个和下一个元素都是非空且非空,那么它只会添加一个分隔符?

换句话说,SmartJoin(", ","Hood","Robin")会产生"胡德,罗宾",但SmartJoin(", ", "Robin Hood", string.Empty)会产生简单的"罗宾汉".

.net c# string join

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