小编Gen*_*ror的帖子

如何将WPF DataGrid绑定到可变数量的列?

我的WPF应用程序生成的数据集可能每次都有不同的列数.输出中包含将用于应用格式的每列的说明.输出的简化版本可能类似于:

class Data
{
    IList<ColumnDescription> ColumnDescriptions { get; set; }
    string[][] Rows { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

此类在WPF DataGrid上设置为DataContext,但实际上我以编程方式创建列:

for (int i = 0; i < data.ColumnDescriptions.Count; i++)
{
    dataGrid.Columns.Add(new DataGridTextColumn
    {
        Header = data.ColumnDescriptions[i].Name,
        Binding = new Binding(string.Format("[{0}]", i))
    });
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用XAML文件中的数据绑定替换此代码?

c# data-binding wpf xaml datagrid

121
推荐指数
4
解决办法
11万
查看次数

网页是什么:版本设置有什么作用?

使用ASP.Net MVC 3工具创建新项目时,它将以下应用程序设置添加到Web.config:

<appSettings>
  <add key="webpages:Version" value="1.0.0.0"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)

它有什么作用?

asp.net-mvc configuration asp.net-mvc-3

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

浮点不准确性有多确定性?

我知道浮点计算存在准确性问题,并且有很多问题可以解释原因.我的问题是,如果我运行两次相同的计算,我是否可以始终依赖它来产生相同的结果?哪些因素可能会影响这个?

  • 计算之间的时间?
  • CPU的当前状态?
  • 不同的硬件?
  • 语言/平台/操作系统?
  • 太阳耀斑?

我有一个简单的物理模拟,并希望记录会话,以便他们可以重播.如果可以依赖计算,那么我只需要记录初始状态加上任何用户输入,我应该始终能够完全重现最终状态.如果计算不准确,那么在开始时错误可能会在模拟结束时产生巨大影响.

我目前在Silverlight工作,但有兴趣知道这个问题是否可以回答一般.

更新: 初始答案表明是,但显然这并不完全清楚,如所选答案的评论中所述.看起来我将不得不做一些测试,看看会发生什么.

c# math floating-point silverlight

25
推荐指数
3
解决办法
4167
查看次数

对象是否应该在C++中删除自己?

我在C#度过了最近4年,所以我对C++中当前的最佳实践和常见设计模式感兴趣.考虑以下部分示例:

class World
{
public:
    void Add(Object *object);
    void Remove(Object *object);
    void Update();
}

class Fire : Object
{
public:
    virtual void Update()
    {
        if(age > burnTime)
        {
            world.Remove(this);
            delete this;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我们有一个负责管理一组对象并定期更新它们的世界.火是一种可能在许多不同情况下被添加到世界中的物体,但通常是世界上已有的另一物体.Fire是唯一知道什么时候它已经烧毁的对象,所以目前我已将它自行删除.造成火灾的对象可能不再存在或相关.

这是一件明智的事情还是有更好的设计来帮助清理这些物体?

c++ oop memory-management self-destruction resource-cleanup

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

我怎么处理异步任务我不想等待?

我正在编写一个多人游戏服务器,我正在研究新的C#async/await功能可以帮助我的方法.服务器的核心是一个循环,它尽可能快地更新游戏中的所有演员:

while (!shutdown)
{
    foreach (var actor in actors)
        actor.Update();

    // Send and receive pending network messages
    // Various other system maintenance
}
Run Code Online (Sandbox Code Playgroud)

这个循环需要处理数千个演员并每秒更新多次以保持游戏顺利运行.有些演员偶尔会在更新函数中执行缓慢的任务,例如从数据库中获取数据,这是我想要使用异步的地方.一旦检索到该数据,actor就想要更新游戏状态,这必须在主线程上完成.

由于这是一个控制台应用程序,我计划编写一个SynchronizationContext,它可以将挂起的委托分派给主循环.这允许这些任务在完成后更新游戏,并允许将未处理的异常抛入主循环.我的问题是,如何编写异步更新功能?这非常好用,但打破了不使用async void的建议:

Thing foo;

public override void Update()
{
    foo.DoThings();

    if (someCondition) {
        UpdateAsync();
    }
}

async void UpdateAsync()
{
    // Get data, but let the server continue in the mean time
    var newFoo = await GetFooFromDatabase();

    // Now back on the main thread, update game state
    this.foo = newFoo;
}
Run Code Online (Sandbox Code Playgroud)

我可以使Update()异步并将任务传播回主循环,但是:

  • 我不想为数千个永远不会使用它的更新增加开销.
  • 即使在主循环中,我也不想等待任务并阻止循环.
  • 等待任务将导致死锁,因为它需要在等待线程上完成.

我怎么办这些我无法等待的任务?我唯一想知道他们已经完成的时间是关闭服务器的时候,但是我不想收集可能需要数星期更新的每一项任务.

c# asynchronous synchronizationcontext task-parallel-library async-await

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

Outlook Interop,邮件格式

我有一个用C#编写的应用程序,它使用Outlook Interop打开一个新的邮件消息,预先填写用户可以在手动发送之前编辑的详细信息.

var newMail = (Outlook.MailItem)outlookApplication.CreateItem(
    Outlook.OlItemType.olMailItem);
newMail.To = "example@exam.ple";
newMail.Subject = "Example";
newMail.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
newMail.HTMLBody = "<p>Dear Example,</p><p>Example example.</p>";
newMail.Display(false);
Run Code Online (Sandbox Code Playgroud)

当同一用户手动创建新消息时,字体将设置为Calibri或用户将其设置为默认字体.问题是自动电子邮件中的文本显示在我们不想要的Times New Roman字体中.

如果我查看其中一封已发送的电子邮件的来源,我可以看到Outlook已明确设置电子邮件来源中的字体:

// Automated
p.MsoNormal, li.MsoNormal, div.MsoNormal
{
    margin:0cm;
    margin-bottom:.0001pt;
    font-size:12.0pt;
    font-family:"Times New Roman";
}

// Manual
p.MsoNormal, li.MsoNormal, div.MsoNormal
{
    margin:0cm;
    margin-bottom:.0001pt;
    font-size:11.0pt;
    font-family:"Calibri","sans-serif";
}
Run Code Online (Sandbox Code Playgroud)

为什么格式不同,如何让自动电子邮件使用用户默认设置?我正在使用互操作程序集的版本11,因为安装了Outlook 2003和2007的混合.

c# email outlook interop stylesheet

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

用Rhino Mocks干燥

我正在寻找使以下更简洁的方法.

public class MyTests
{
    IPresenter presenter;

    [SetUp]
    public void SetUp()
    {
        presenter = MockRepository.GenerateStub<IPresenter>();
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

特别是在创建模拟时再次指定类型似乎是多余的.例如,我可以这样写它并使用反射来获取类型并自动创建存根:

public class MyTests
{
    IPresenter presenter;

    [SetUp]
    public void SetUp()
    {
        Stub(x => x.presenter);
    }

    void Stub(Expression<Func<MyTests, object>> expression)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这可以工作,但编译器无法再检测到分配了演示者并开始发出警告.这也让ReSharper非常不满意.

有谁能建议更好的方法?

c# nunit unit-testing rhino-mocks dry

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