小编Tim*_*ell的帖子

是否可以在编译时打印出C++类的大小?

是否有可能在编译时确定C++类的大小?

我似乎记得模板元编程方法,但我可能会弄错...


抱歉没有更清楚 - 我希望在构建输出窗口中打印大小

c++

61
推荐指数
3
解决办法
2万
查看次数

自动INotifyPropertyChanged

有没有办法自动获得类中属性更改的通知,而无需在每个setter中编写OnPropertyChanged?(如果有更改,我有数百个我想知道的属性).


安东建议使用动态代理.我实际上使用过"Castle"库来获得类似的东西,虽然它确实减少了我必须编写的代码量,但它增加了大约30秒到我的程序启动时间(ymmv) - 因为它是一个运行时方案.

我想知道是否有编译时解决方案,可能使用编译时属性...


Slashene和TcKs给出了产生重复代码的建议 - 遗憾的是,并非所有属性都是m_Value = value的简单情况 - 很多都在setter中有自定义代码,所以来自代码片段和xml的cookie-cutter代码实际上不可行我的项目也是.

c# inotifypropertychanged

57
推荐指数
6
解决办法
3万
查看次数

什么可能导致设计视图如此缓慢?

对于小项目,我几乎可以立即切换到设计视图(<1秒).

我有一个大型项目,在设计视图中打开控件或表单大约需要60秒 - 这是第一次.在这60秒延迟之后,我几乎可以立即在设计视图中打开项目中的任何控件 - 直到我重新编译项目.

如果这个项目构建的exe在另一个(小)项目中被引用,那么小项目就会像大项目一样变得迟钝.同样,如果我将大项目中的所有文件分别添加到小项目中,那么小项目就会变得迟钝.

大型项目引用了一个大型的Managed C++项目,但是如果我向小项目添加相同的引用(并从引用调用函数以确保它被加载),那么小项目仍然很快.

我的大项目使用SandDock.如果我的小项目使用SandDock,它仍然很快.

我的大项目有大约60个用户控件出现在工具箱中.如果我向小项目添加60个用户控件,那么小项目仍然很快.

如果我使用[System.ComponentModel.ToolboxItem(false)]使工具箱中的用户控件隐藏,则大项目仍然很慢.

vs2005和vs2008都会出现此问题.

什么可能使大型项目第一次打开设计视图这么慢?其他一些参考?大量的控制?大量的课程?其他一些原因?

我注意到的一件事(尽管可能是红色鲱鱼)是ProjectAssemblies文件夹(C:\ Documents and Settings\tim.gradwell\Local Settings\Application Data\Microsoft\VisualStudio\9.0\ProjectAssemblies)很大(> 1GB)这里的大多数文件夹都有我的Managed C++ dll的副本!每次重新打开设计视图时(重新编译后),都会重新创建这些文件夹.这可能与减速有关吗?


更多信息:

用户控件或表单中的工具条使表单加载需要60秒.删除工具条(但在表单上仍然有其他几个不同的控件)使交换机即时设计视图.

虽然这不是整个故事......一个全新项目中的工具条不会导致大幅减速 - 所以我的大项目中肯定会有一些影响工具条的东西.此外,某些其他没有工具条的表单/控件仍然需要60秒才能显示设计视图,因此无论影响工具条的是什么,也会影响其他控件.我将继续努力确切地确定哪些控件,甚至可能是什么导致它!

c# visual-studio winforms

8
推荐指数
3
解决办法
6689
查看次数

是否可以在datagridview中切换行和列?

我在DataTable中有10条数据记录,它有3个字段"Foo","Bar"和"Baz".

如果我将它连接到DataGridView,我会看到10行和3列,列标题显示字段的名称.

我想知道反转行和列是多么容易,因此使用相同的数据我最终得到3行和10列,字段名称显示在行标题中.


我可以手工做一些事情,比如重写OnPaint方法并将字段名称直接绘制到行标题单元格中,但我正在寻找更自动化的东西.

同样,有一个建议是手动交换值,但除非我将所有值都设置为字符串,否则这不会起作用.数据表中的3列 - 类型为int,float和string的Foo,Bar和Baz不会转置.

即使我管理了所有这些手动更改,我的数据网格也有CheckBox列,ComboBox列 - 没有这样的行对应存在 - 没有CheckBox行或ComboBox行.我目前只需要告诉编译器"添加一个ComboBoxColumn",我必须重新编写,以便每个单元格都是单独生成的.

理想情况下,我想要一个TransposableDataGridView,它暴露了DataGridView的所有功能,并附加了一个bool属性"Transposed".这样我就可以完全保留我的所有代码 - 除了网格的类型之外,我不需要改变任何东西.

如果不存在这样的情况,我可能只需要去写它.(应该只花一年时间!:)

c# datagridview winforms

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

重命名字段,然后在C#中反序列化

我将数据存储在已使用.net BinaryFormatter序列化的类的实例中.我现在想要重命名该类中的一个字段,但仍然能够反序列化旧数据.

一种选择是手动实现ISerializable并反序列化该类的所有字段.但这似乎很多工作,特别是如果我的班级有很多字段而且我只重命名了一个字段.

有没有更好的办法?


Craig建议保留旧类的副本以进行反序列化,并将值复制到新类.我在其他地方也看到了这个建议 - 这比实现ISerializable有什么优势?据我所知,复制该类给我留下了两个几乎相同的类副本,而且我仍然需要将旧类中的所有值复制到新类 - 这似乎与实现ISerializable的工作量相同.几乎重复的类投入混合.


两个答案提到了宾德斯.我已经成功地使用SerializationBinder反序列化了一个被序列化为类Foo的类Bar,但那是因为类的名称发生了变化.当你重命名一个字段时,SerializationBinder是否也有帮助 - 例如当int m_Left被重命名为int m_Right时?

c# serialization

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

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

命名枚举类型

如果您有一组相关的单词(例如行和列或开和关),您如何找到描述这些单词的集体单词?具体来说,你如何命名枚举?

如果我有"红色","绿色"和"蓝色",则合理的枚举名称可能是"颜色"."开"和"关"的值可能具有合理的枚举名称"Power".但是,如何命名可以具有"行"或"列"值的枚举?


几个很好的答案"你怎么命名一行或列枚举?" - 笛卡儿和IndexType.

如何找到一般的集体词 - 那里有没有资源,或者你只需​​要擅长英语/知道很多单词?

java enums naming

5
推荐指数
3
解决办法
746
查看次数

推或拉?将按键转换为游戏中车辆的速度

我是否应该在按下按键时将按键推到车辆上,或者车辆是否应该从发动机上按下按键?

我有一个车辆物体,它有位置,速度和加速成员(以及其他东西)和更新方法,在此期间它根据其速度和基于其加速度的vevlocity更新其位置.

我有一个游戏对象,其中包含游戏循环,它调用车辆上的更新方法.

如果玩家用箭头键控制车辆,按键是否设置加速(按下)和按键释放清除速度,或者车辆是否应该询问游戏引擎是否按下了按下(拉动)?我认为推动意味着键盘控制模块需要了解车辆,而拉动意味着车辆需要知道特定的键盘控制.

我认为一个相关的问题是:如果所有对象都知道所有其他对象,或者是否应该有严格的层次结构,那么对象可以向树上的其他对象询问事物/告诉事物,但不要向下(或反之亦然) )?

language-agnostic

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

我可以让Visual Studio(2008)编辑器将当前行保留在屏幕中间吗?

我希望我当前的编辑线位于屏幕中间.

有谁知道它是否可能,以及如何?

蒂姆,谢谢

visual-studio-2008 visual-studio

4
推荐指数
2
解决办法
125
查看次数

自动生成c#类

我经常发现我正在写一个类似于以下的类(但是有不同数量的成员,成员类型等).是否可以自动,轻松,免费地执行此操作?

所以,我想提供的参数"富","INT","苹果","布尔","香蕉","酒吧"和"克莱门汀",并有对我产生代码的其余部分.

public class Foo
{
   public Foo(int apples, bool banana, Bar clementine)
   {
      m_Apples = apples;
      m_Banana = banana;
      m_Clementine = clementine;
   }

   public int Apples
   {
      get { return m_Apples; }
      set { m_Apples = value; }
   }

   public bool Banana
   {
      get { return m_Banana; }
      set { m_Banana = value; }
   }

   public Bar Clementine
   {
      get { return m_Clementine; }
      set { m_Clementine = value; }
   }

   private int m_Apples;
   private bool m_Banana;
   private Bar …
Run Code Online (Sandbox Code Playgroud)

c# code-generation

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