小编Fir*_*gon的帖子

这个函数如何改变我的readonly变量?

我在C#中使用jabber.net并且有一个让我困惑的怪癖,所以希望有人可以解释它是如何做到的.从C++背景来看,我对C#还是很陌生,所以这可能是一个误解

我正在创建一个只读JID来保存我需要输入的房间:

private readonly JID messagingRoomJID;

public MyClass
{
   // Reads from database but for purpose of this question
   messagingRoomJID = new JID("user@myserver");
}
Run Code Online (Sandbox Code Playgroud)

后来我想加入一个房间,这是我得到的东西,我很困惑

conferenceManager = new ConferenceManager();
conferenceManager.Stream = xmppClient;

// Before entering this room messagingRoomJID.Resource == null
theRoom = conferenceManager.GetRoom(messagingRoomJID);
// But now messagingRoomJID.Resource contains my username
Run Code Online (Sandbox Code Playgroud)

但资源如何改变?变量是只读的,但也不应该通过const引用传递,所以它是如何被更新的呢?

看起来我可以做到这一点,但我不确定这是明智的:

theRoom = conferenceManager.GetRoom(new JID(messagingRoomJID));
Run Code Online (Sandbox Code Playgroud)

c# xmpp

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

NotifyPropertyChanged线程安全吗?

我在看NotifyPropertyChanged()距离INotifyPropertyChanged,并注意到,在微软的例子,如在这里:

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

首先没有捕获委托引用(例如,它在这里说:在事件处理程序中使用null check)

我查看了自动生成的Reference.cs以获取我的ServiceReferences,并完成了此检查.

所以我的问题是我应该这样做(以任何形式,如扩展方法等)?如果不这样做,是否有任何可能的问题?

c# silverlight wpf

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

事件处理程序中的功能代码不好的做法?

我正在阅读一些C#编码标准,它有:

"事件处理程序不应包含执行所需操作的代码.而是从事件处理程序调用另一个方法"

我想知道是否有理由(表演或其他)或者它只是一种风格偏好?

c#

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

分配给double的数字的F后缀

我知道用f后缀一个浮点数让编译器知道它是一个浮点而不是一个double.在浮子上操作而不是双打时,防止不必要的铸造非常重要.但是在某些代码中我是由外部公司提供的,例如我见过以下内容:

double i = 1.4f;
Run Code Online (Sandbox Code Playgroud)

现在我想知道的是这种情况会发生什么?编译器是否会默默地忽略'f',它只是对任何东西都没有影响的东西,我可以放心地忽略它?

然后我想知道如果将数字分配给其他地方带有f后缀的双精度数,那么不仅仅是在初始化时,这是一个不同的情况吗?

c c++

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

确定条件语句中的单个语句是正确的

我有许多信号可以是真的,假的或无效的,但只有其中一个可以是真的,否则它是一个错误.

我想知道是否有办法轻松检查这个,而不是需要做一个大的if语句

enum sig_type
{
  sig_invalid, sig_true, sig_false
};

sig_type sig1 = GetSignal("sig1");
sig_type sig2 = GetSignal("sig1");
sig_type sig3 = GetSignal("sig1");
sig_type sig4 = GetSignal("sig1");

if (sig1 == sig_true)
{
  if (sig2 == sig_true || sig3 == sig_true || sig4 == sig_true)
  {
    // Error
  }
}
else if (sig2 == sig_true)
{
  if (sig1 == sig_true || sig3 == sig_true || sig4 == sig_true)
  {
    // Error
  }
}
Run Code Online (Sandbox Code Playgroud)

等等......这是一个重要的代码量,只是随着我添加信号而增加,因此在这种状态下将无法管理

c

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

在函数调用中创建新对象

我想知道创建新对象作为方法的一部分(或实际构造函数调用)是否安全

比如下面的混乱例子:

public class Igloo
{
    public int i = 5;
}

public class Program
{
    static void Main(string[] args)
    {
        DoSomething(new Igloo());
    }

    private static void DoSomething(Igloo i)
    {
        Debug.WriteLine(i.i);
    }
}
Run Code Online (Sandbox Code Playgroud)

创建像这样的临时对象不赞成?是否正确清理了创建的新对象.

c#

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

通过MVVMLight发送命令

我正在使用MVVMLight并经历一些学习曲线,试图找出通信的工作原理.我理解Properties如何与Silverlight绑定一起工作,这一切都很简单.

现在我想知道的是发送Message as a Command的最佳方法是什么.因此,例如,我想向我的ViewModel发送一条消息以清除其列表.

所以我可以创建一个枚举来充当命令

enum MessageOp
{
    Reset
}
Run Code Online (Sandbox Code Playgroud)

但是,我怎么能把它作为命令发送?目前我发送它作为类,但然后需要再次作为令牌发送它.像这样:

Messenger.Default.Send<MessageOp>(MessageOp.Reset, MessageOp.Reset);
Run Code Online (Sandbox Code Playgroud)

我在ViewModel中的代码是这样的:

Messenger.Default.Register<MessageOp>(
    this, MessageOp.Reset,
    delegate(MessageOp op)
    {
        // Erase all entries
        MyDictionary.Clear();
    });
Run Code Online (Sandbox Code Playgroud)

我想到的一种方法是创建一个完全空的类来充当命令.这是最好的方法,因为我觉得有点奇怪创建空类来表现这样

mvvm-light

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

为什么这个循环再做一次迭代?

存在一个存储在数据库中的角色列表,模型中只有一个角色.实体框架用于填充模型,但我认为这不重要.

代码打击似乎用于迭代这些:

foreach (var role in (new Role[1]).Concat(model.Roles))
{
}
Run Code Online (Sandbox Code Playgroud)

但说实话,我无法理解这段代码正在做什么.我所知道的是它循环两次而不是一次.任何人都可以澄清它在做什么吗?

c# entity-framework

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

如何从多个模型绑定Bing Pushpins?

我的WP7应用程序中有要求在多个数据源的bing映射上显示图钉,我不确定这样做的最佳方法.

例如,它会是这样的,我从Web服务接收人员列表,建筑物列表,POI列表等.我需要在他们自己的视图中单独显示这些,但也在地图上显示它们每种类型都有不同的图像.

我正在尝试使用MVVM方法,因此有一个Person类,一个建筑类等等,每个都有一个位置.然后我为每个类型都有一个ObservableCollection,因此使用数据绑定很容易为每个类型执行View.

目前我只有一个ViewModel,但我的第一个想法是我认为每个类型应该有一个ViewModel.那么PersonViewModel,BuildingViewModel在这里?但是,Map View需要从这些视图中获取信息,我不确定如何将视图绑定到多个ViewModel,或者即使这是合理的.

MapItemsControl似乎也只能绑定到一个东西,所以如何将它绑定到这样的多个不同的数据源?我想我可以创建一个简单的图钉类,但这意味着每个类型的数据都重复,我最终希望能够点击图钉来显示图钉的细节,所以我希望将这些类型分开

任何关于前进道路的指针都非常赞赏

silverlight mvvm bing-maps pushpin windows-phone-7

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

在向导页面上处理取消

我怀疑我正在努力使a QWizardPage做得比预期的要多,这就是为什么我遇到问题的原因,但是也许有一种方法可以做到。

因此,我在内有许多页面,QWizard并且在某个页面上,我针对某些硬件运行了一系列测试,然后将结果存储在数据库中。我希望能够在必要时取消。但是,目前“取消”按钮是QWizard的一部分,因此我不确定如何处理它。

我知道我可以覆盖其reject()功能,QWizard然后确定当前页面,如果它是我感兴趣的页面,则可以执行一些操作,但是除非有必要,否则我不希望以这种方式将页面捆绑在一起。

我确实尝试将rejected()信号连接到向导,如下所示:

connect(this, SIGNAL(rejected()), ui->runTestPage, SLOT(on_rejected()));
Run Code Online (Sandbox Code Playgroud)

但这无论如何都会立即关闭页面,然后我才能向用户显示任何内容以表示我要取消。

我可以在向导页面上添加一个按钮,该向导页面将在测试运行时显示以允许取消,但是该页面仍然具有主要的取消按钮。实际上,即使在测试完成后,“取消”仍然会显示,因此能够删除或禁用它似乎是适当的。

那么,这是我可以做的事情还是需要重新回顾向导的整个使用过程?

qt

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

标签 统计

c# ×5

c ×2

silverlight ×2

bing-maps ×1

c++ ×1

entity-framework ×1

mvvm ×1

mvvm-light ×1

pushpin ×1

qt ×1

windows-phone-7 ×1

wpf ×1

xmpp ×1