小编Dav*_*vy8的帖子

在c#中需要有关组播udp服务器发现的帮助

作为这个问题的后续问题,我已经在我的本地机器上运行了一个解决方案,但是没有在网络上的机器上运行.

我不太了解那些基础知识以外的插座,所以请耐心等待.目标是让客户端在本地网络上查找服务器,这是一些剪切/粘贴/编辑代码的结果.

这是客户端代码:

IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 10294);

    byte[] data = new byte[1024];
    public Form1()
    {
        InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)
    {

        Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 10);
        string welcome = "What's your IP?";
        data = Encoding.ASCII.GetBytes(welcome);
        client.SendTo(data, data.Length, SocketFlags.None, ipep);
        IPEndPoint server = new IPEndPoint(IPAddress.Any, 0);
        EndPoint tmpRemote = (EndPoint)server;
        data = new byte[1024];
        int recv = client.ReceiveFrom(data, ref tmpRemote);
        this.IP.Text = ((IPEndPoint)tmpRemote).Address.ToString(); //set textbox
        this.Port.Text = …
Run Code Online (Sandbox Code Playgroud)

.net c# udp multicast

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

如何将视图逻辑从模型和业务逻辑中排除在MVVM中的视图模型之外?

我无法弄清楚如何在我的模型中添加一堆UI特定的东西,如INotifyProperyChanged和INotifyCollectionChanged,或者创建大量不同的事件并做一些感觉的事情,让视图模型得到模型更改的通知就像他们是UI特定的,应该远离模型.

否则,我只需要复制视图模型中的所有业务逻辑,以确保一切都是最新的,那么拥有模型的重点是什么呢?

我在模型中遇到的一个棘手的问题是"类别"类的属性.您可以将其视为树结构,属性是所有叶节点后代.在模型中,属性是通过递归方式生成所有它的子项,这一切都很好.但是视图模型需要绑定到该属性,并且需要知道它何时发生更改.我应该更改模型以适应视图模型吗?如果我这样做,那么视图模型此时并没有真正做任何事情,模型会引发所有必要的更改通知,视图可以直接绑定到模型.此外,如果模型是我没有源的东西,我将如何解决这个问题?

wpf business-logic mvvm viewmodel

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

在C#中使用扩展方法进行伪多重继承?

类似的问题,但不完全相同的事情

我认为使用与接口相同的命名空间中的扩展方法,您可以获得与多继承类似的效果,因为您不需要在10个不同的类中以相同的方式实现相同的接口的重复代码.

这样做的一些缺点是什么?我认为专业人士非常明显,这是后来通常会再次咬你的缺点.

我看到的一个缺点是扩展方法不能是虚拟的,因此您需要确保实际上确实希望它们以相同的方式实现每个实例.

extension-methods dry multiple-inheritance c#-3.0

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

什么时候.NET WinForms应用程序中的异常只是被吃掉而没有被捕获或冒泡到Windows异常?

在我们的代码中的几个地方,我们注意到如果在调试器下运行,它将显示代码中存在未处理的异常,但是如果在调试器外部运行它将完全忽略异常,就好像它被捕获一样.我们有一个异常处理程序,它弹出一个连接到Application.ThreadException和AppDomain.CurrentDomain.UnhandledException的错误提交对话框.这些都不会捕获它们.我们还记录了我们的异常,日志中没有任何内容.

这有什么可能的原因?

编辑:似乎它不依赖于异常抛出的类型,而是它抛出的位置.仅通过添加以下测试:

throw new Exception("Test Exception");
Run Code Online (Sandbox Code Playgroud)

它将显示在调试器下但不会显示在外部,因此在我们的示例中,它不是ThreadAbortedException或任何依赖于它的特定类型的异常.

c# unhandled-exception winforms

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

在关系数据库中存储文件夹层次结构

我有代表文件夹的对象,我想知道它们是否应该在数据库中表示.

一方面,似乎最简单的方法是不表示文件夹对象,只存储文件夹中包含的对象的路径值.我看到的问题是你不能保留一个后代不包含任何项目的文件夹,这不是什么大不了的事.此外,我还没有清楚地知道如何加载文件夹层次结构以显示(例如在TreeView中)而不将所有内容加载到内存中,这可能是性能问题.

另一种方法是使用一个"文件夹"表,其中包含对其父文件夹的引用.这似乎应该可行,但我不确定如何允许具有相同名称的文件夹,只要它们不共享父级.这甚至应该是DB应该关注的事情,还是我应该在业务逻辑中执行的事情?

sql directory relational hierarchy sql-server-ce

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

YAGNI是否适用于数据库设计?

在代码中,添加新类通常很容易提供额外的功能等.我对重构代码以及所涉及的内容有相当好的理解,因此YAGNI通常对我有意义.

我不熟悉的是在部署后使用和更新关系数据库.我正在开发一个小宠物项目,我计划在早期发布,经常发布,我想知道我是否应该考虑在初始版本中不会使用的数据,但是在计划的功能列表中?是否像添加新类一样容易添加表和调整模式?或者我应该尝试为可以想象使用的东西设置表格,但是不计划在不久的将来?

database-design yagni

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

在给定当前URL的情况下,是否有内置的创建绝对(完全限定)url来自相对路径,例如"〜/ page.aspx"?

场景是我有一个应用程序相对url,如"〜/ path/to/page.aspx?query = string".我需要以编程方式创建对该页面的Web请求并且当前正在使用WebRequest.Create.问题是WebRequest.Create需要一个完全限定的URL,包括协议/域/端口等.

我可以访问当前的Request.Url对象,但似乎没有一种简单的方法可以获得保持协议(HTTP与HTTPS)的基本URL以及任何端口号以及应用程序的路径.

我的意思是那里的所有信息,所以如果需要我可以只采取所有部分并将它们结合起来,但似乎它可能容易出错,并且内置一些经过充分测试以完成工作的内容会很棒. Page.ResolveUrl让我几乎到了那里,但它缺少协议和域/端口.

c# asp.net url

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

在同一个模拟实例上断言对公共方法的调用

我有以下测试

[Test]
public void Attack_TargetWith3Damage_CausesAttackerToDeal3DamageToTarget()
{
    var realAttacker = CreateCreature(damage: 3);
    var wrappedAttacker = A.Fake<ICreature>(x => x.Wrapping(realAttacker));
    var target = A.Fake<ICreature>();
    wrappedAttacker.Attack(target);
    A.CallTo(() => wrappedAttacker.DealDamage(target, 3)).MustHaveHappened();
}
Run Code Online (Sandbox Code Playgroud)

问题是,该呼叫DealDamageAttack方法没有被注册,因为该方法中,thisrealAttacker不是wrappedAttacker攻击者因此调用该方法不被拦截.

我该如何测试这个断言?可以用FakeItEasy完成吗?是否有一个不同的模拟框架允许我测试它?

c# nunit unit-testing mocking fakeiteasy

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

返回函数的函数的命名约定是什么?

function getPerformActionFunction(someParameter) {
    return function() { 
        performAction(someParameter);
    }
}
Run Code Online (Sandbox Code Playgroud)

你会问什么getPerformActionFunction表明它不执行动作,而是返回执行动作的函数?

示例是Javascript,如果有一个首选的Javascript约定,但如果答案不同,也对其他语言感兴趣.

naming-conventions

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

这段代码如何抛出NullReferenceException?

我必须忘记,因为我的单元测试失败,因为以下代码抛出了null ref异常:

int pid = 0;
if (parentCategory != null)
{
    Console.WriteLine(parentCategory.Id);
    pid = parentCategory.Id;
}
Run Code Online (Sandbox Code Playgroud)

投掷它的线是:

pid = parentCategory.Id;
Run Code Online (Sandbox Code Playgroud)

console.writeline只是在NUnit GUI中调试,但输出有效的int.

编辑:它是单线程的,因此无法从其他某个线程分配为null,而Console.WriteLine成功打印出该值的事实表明它不应该抛出.

编辑: Category类的相关片段:

public class Category
{
    private readonly int id;

    public Category(Category parent, int id)
    {
        Parent = parent;
        parent.PerformIfNotNull(() => parent.subcategories.AddIfNew(this));
        Name = string.Empty;
        this.id = id;
    }
    public int Id
    {
        get { return id; }
    }
}
Run Code Online (Sandbox Code Playgroud)

好吧,如果有人想查看完整的代码,请访问http://code.google.com/p/chefbook/source/checkout上的Google Code

我想我会尝试重新启动计算机...我已经看到通过重启修复了很奇怪的事情.重启后会更新.

更新:神秘解决了.看起来NUnit将错误行显示为最后成功执行的语句...将复制/粘贴测试复制到新控制台应用程序并在VS中运行显示它是包含空引用的if语句块(未显示)之后的行.感谢大家的所有想法.给每个回答的人+1.

c# nunit

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