小编NoP*_*God的帖子

FlagsAttribute Enum问题

所以我正在构建一个MSNP(windows live messenger)客户端.我有这个功能列表

public enum UserCapabilities : long
{
    None = 0,
    MobileOnline = 1 << 0,
    MSN8User = 1 << 1,
    RendersGif = 1 << 2,
    ....
    MsgrVersion7 = 1 << 30,
    MsgrVersion8 = 1 << 31,
    MsgrVersion9 = 1 << 32,
}
Run Code Online (Sandbox Code Playgroud)

完整列表http://paste.pocoo.org/show/383240/

服务器将每个用户的功能作为一个长整数发送给客户端,我将其转换为UserCapabilities

capabilities = Int64.Parse(e.Command.Args[3]);
user._capabilities = (UserCapabilities)capabilities;
Run Code Online (Sandbox Code Playgroud)

这很好,至少有一个用户(能力值为1879474220),我能做到

Debug.WriteLine(_msgr.GetUser(usr).Capabilities);
Run Code Online (Sandbox Code Playgroud)

这将输出

RendersGif, RendersIsf, SupportsChunking, IsBot, SupportsSChannel, SupportsSipInvite, MsgrVersion5, MsgrVersion6, MsgrVersion7
Run Code Online (Sandbox Code Playgroud)

但是对于具有(3055849760)能力值的另一个用户,当我这样做时,我只输出相同的数字

3055849760
Run Code Online (Sandbox Code Playgroud)

我希望看到的是功能列表,与其他用户一样.

我确信这种情况有一个非常合理的原因,但无论我多么努力地向谷歌提问,我都找不到答案.

请帮我 :)

.net c# enum-flags

31
推荐指数
2
解决办法
1503
查看次数

实体框架:DbContext并设置ProviderName

当您从DbContext派生并使用无参数构造函数时,它将从web.config加载连接字符串.您还可以选择使用其他DbContext构造函数之一显式指定connectionString.

我的特殊情况表明不能在web.config中指定连接字符串,因为服务器/用户名和密码的位置是在运行时确定的.轻松修复吧?只需使用上面提到的构造函数来指定连接字符串?错误.

问题是,当您使用所述构造函数指定连接字符串时,它仍会尝试使用默认提供程序,因此如果您使用一个或多个非标准提供程序,就像我一样,它将无法工作.

我确定我可以在web.config中更改默认提供程序,但我想使用多个提供程序,所以这不会.

我能看到的唯一可能的方法是使用ObjectContext而不是DbContext,这似乎允许您指定提供程序以及数据库连接字符串.

还有其他办法吗?我的解决方法是否合理?

我相信我也可以从ObjectContext实例创建一个DbContext.

entity-framework

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

C#与Delphi中日期/时间计算之间的差异

德尔福:

SecondsBetween(StrToDateTime('16/02/2009 11:25:34 p.m.'), StrToDateTime('1/01/2005 12:00:00 a.m.'));

130289133
Run Code Online (Sandbox Code Playgroud)

C#:

TimeSpan span = DateTime.Parse("16/02/2009 11:25:34 p.m.").Subtract(DateTime.Parse("1/01/2005 12:00:00 a.m."));

130289134
Run Code Online (Sandbox Code Playgroud)

它也不一致.有些日期会加起来相同,即..

TimeSpan span = DateTime.Parse("16/11/2011 11:25:43 p.m.").Subtract(DateTime.Parse("1/01/2005 12:00:00 a.m."));

SecondsBetween(StrToDateTime('16/11/2011 11:25:43 p.m.'), StrToDateTime('1/01/2005 12:00:00 a.m.'));

both give

216905143
Run Code Online (Sandbox Code Playgroud)

实际上用于编码数据的总秒数,我正在尝试将应用程序移植到C#,所以即使一秒钟完全抛弃所有内容.

任何人都可以解释这种差异吗?有没有办法让c#匹配delphi?

编辑:响应建议它可能是闰秒相关:两个日期范围包含相同数量的闰秒(2),因此您可能会预期两者都不匹配.但相反,我们看到了不一致

16/02/2009 - 1/01/2005 = Delphi and C# calculate a different total seconds

16/11/2011 - 1/01/2005 = They calculate the same total seconds
Run Code Online (Sandbox Code Playgroud)

c# delphi datetime

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

WPF Datagrid - 在DataGrid中单击空格时取消选择所选项

默认行为是使用CTRL +单击以取消选择数据网格中的项目

我希望能够鼠标单击(左或右按钮)网格中的空白,并取消选择任何选定的项目.

我用谷歌搜索了它,发现了一些非常复杂的变通方法,但我希望有一个简单的解决方案.

编辑:

我现在正在使用listview,但仍未找到解决方案.虽然因为它们的风格更好,但它对于列表视图稍微不那么烦人了.

c# wpf datagrid

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

为什么Console.In.ReadLineAsync阻止?

使用以下代码启动新的控制台应用程序 -

class Program
{
    static void Main(string[] args)
    {
        while (true)
        {
            Task<string> readLineTask = Console.In.ReadLineAsync();

            Debug.WriteLine("hi");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Console.In.ReadLineAsync是阻塞的,直到在控制台中输入一行才返回..所以"Hi"永远不会写入控制台.

在Console.In.ReadLineAsync上使用await也会阻塞.

据我所知,新的Async CTP方法不会阻塞.

这是什么原因?


这是另一个例子

static void Main(string[] args)
{
    Task delayTask = Task.Delay(50000);

    Debug.WriteLine("hi");
}
Run Code Online (Sandbox Code Playgroud)

这表现如我所料,它直接到下一行并打印"hi",因为Task.Delay不会阻塞.

c# async-await

10
推荐指数
2
解决办法
4115
查看次数

Firemonkey/Delphi中的流体/动态布局

假设我想要一个并排放置的窗体上的两个形状,每个窗口占据窗口的50%,当窗口调整大小时会调整大小.我怎样才能做到这一点?

我真正想要的是按比例设置...例如..上述形状之一占25%,另一种占75%

动态调整大小非常重要,我不想输入任何代码来实现这一点.

delphi delphi-xe2 firemonkey

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

获取异步方法体中的当前Task实例

如果我有一个像这样的异步方法体 -

public async Task GetSomething() {

    await SendText("hi");
    await SendImage("bla.bmp");

}
Run Code Online (Sandbox Code Playgroud)

在等待启动时​​,如何在将Task对象返回给用户之前获取该对象

即..

public async Task GetSomething() {

    myTasks.Add(Task.Current);
    await SendText("hi");
    await SendImage("bla.bmp");

    //some processing

}
Run Code Online (Sandbox Code Playgroud)

所以我可以做的其他地方

 await Task.WhenAll(myTasks);
 Console.WriteLine("All tasks complete");
Run Code Online (Sandbox Code Playgroud)

这样我就可以在关机前等待所有任务完成

.net c# asynchronous

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

RX Observable.TakeWhile在每个元素之前检查条件,但我需要在之后执行检查

Observable.TakeWhile允许你运行一个序列,只要条件为真(使用委托,所以我们可以对实际的序列对象执行计算),但是它会在每个元素之前检查这个条件.如何在每个元素之后执行相同的检查?

以下代码演示了此问题

    void RunIt()
    {
        List<SomeCommand> listOfCommands = new List<SomeCommand>();
        listOfCommands.Add(new SomeCommand { CurrentIndex = 1, TotalCount = 3 });
        listOfCommands.Add(new SomeCommand { CurrentIndex = 2, TotalCount = 3 });
        listOfCommands.Add(new SomeCommand { CurrentIndex = 3, TotalCount = 3 });

        var obs = listOfCommands.ToObservable().TakeWhile(c => c.CurrentIndex != c.TotalCount);

        obs.Subscribe(x =>
        {
            Debug.WriteLine("{0} of {1}", x.CurrentIndex, x.TotalCount);
        });
    }

    class SomeCommand
    {
        public int CurrentIndex;
        public int TotalCount;
    }
Run Code Online (Sandbox Code Playgroud)

这输出

1 of 3
2 of 3
Run Code Online (Sandbox Code Playgroud)

我无法得到第三个元素

看看这个例子,你可能认为我所要做的就是改变我的状况 -

var obs …
Run Code Online (Sandbox Code Playgroud)

c# system.reactive

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

NodeJS - 多个对象分布在多个文件中但位于同一名称空间中

我在NodeJS中编写了一个多人棋盘游戏服务器,我有几个不同的对象,如游戏,用户,棋盘等.目前,所有这些对象都驻留在由NodeJS执行的单个'sever.js'文件中.

随着我的项目的发展,这个单个文件变得越来越拥挤,难以导航.

我想要的是将这些对象拆分成多个js文件,但不必在整个地方使用require函数.

我希望继续创建这样的对象 -

game = new Game();
Run Code Online (Sandbox Code Playgroud)

而不是这个 -

game = new (require('game')).Game()
Run Code Online (Sandbox Code Playgroud)

-

编辑:

NodeJS的正确做法是什么?

javascript node.js

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

DDD和配置

如何在DDD中授予用户配置设置的访问权限?

我们有一个配置数据库,它将项目存储为一堆键值对.这似乎并不适合存储库模式,因此如何使用户能够访问这些配置值?

理想情况下,我想为不同的配置分组设置单独的类,即.. BillingSettings,ReportSettings,TaxSettings.

为每个这些设置提供单独的存储库似乎很奇怪,但我还想保持这些设置类的持久性无知.

在DDD中启用配置访问的正确方法是什么?

domain-driven-design repository-pattern

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