小编Gro*_*roo的帖子

创建可扩展属性类(OOP)

我有一个应用程序,它支持某些设备的多种类型和版本.它可以连接到这些设备并检索各种信息.

根据设备的类型,我有(除其他外)一个可以包含各种属性的类.某些属性对所有设备都是通用的,有些属性对于特定设备是唯一的.

此数据序列化为xml.

实现一个类的首选方法是什么,它将支持这些设备的未来版本中的未来属性,以及向后兼容以前的应用程序版本?

我可以想到几种方法,但我发现它们都不是很好:

  • 使用一组名称 - 值对:
    • 专业人士:良好的向后兼容性(我的应用程序的xml和以前版本)和可扩展性,
    • 缺点:没有类型安全,没有intellisense,需要实现自定义xml序列化(处理不同的value对象)
  • 为每个新设备创建派生属性类:
    • 专业人士:类型安全
    • 缺点:必须使用XmlInclude或自定义序列化来反序列化派生类,不与以前的xml架构向后兼容(虽然通过实现自定义序列化我可以跳过未知属性?),需要强制转换来访问派生类中的属性.
  • 另一种方法呢?

顺便说一句,我正在使用C#.

c# oop inheritance xml-serialization

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

RichTextBox(.NET Winforms)问题(或替代)

我有.Net的RichTextBox控件的问题.它似乎不支持表格单元格格式化,这很有趣,因为大多数时候我创建表格我希望单元格内容是右对齐的(数字,货币).

如果我尝试在RichTextBox中打开写字板文档,它会忽略(并实际删除)用于单元格对齐的命令.我尝试了几种解决方法,但没有成功.

  1. 谁能想到解决这个问题的想法?(不使用固定宽度的字体和空格)这将是最好的解决方案,因为其他代码已经正常工作,所以如果只需要的东西是一个肮脏的黑客,它会很棒.

  2. 或者,您可以推荐使用.Net Rich Text Editor的开源替代方案吗?我需要一个用户控件,我可以嵌入我的Windows窗体并以编程方式访问内容(创建内容或附加内容).我在网上搜索了一段时间,但发现只有web(Ajax/Javascript)控件.

  3. 我也可以使用HTML WYSIWYG编辑器,但它们基本上都是使用MSHTML嵌入和编辑的IE浏览器,在Winforms应用程序中使用它感觉有点奇怪(也许我错了).在这种情况下,我们需要一些额外的时间来实现HTML的内容生成器 - 尽管它比RTF恕我直言更容易阅读和生成.

  4. 你们为此目的最好的是什么?

.net wysiwyg rtf richtextbox html-editor

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

在这个C#代码中我的方法之后做什么符号"=>"?

我最近在这里问了一个问题,有人提供了这个答案:

private void button1_Click(object sender, EventArgs e)
{
     var client = new WebClient();
     Uri X = new Uri("http://www.google.com");

     client.DownloadStringCompleted += (s, args) => //THIS, WHAT IS IT DOING?
     {
         if (args.Error == null && !args.Cancelled)
         {
             MessageBox.Show();
         }
     };

     client.DownloadStringAsync(X);
}
Run Code Online (Sandbox Code Playgroud)

那是什么=>做什么?这是我第一次看到这个.

c# c#-3.0

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

Fluent-NHibernate:如何通过独特的约束创建多对多关系

我想创建多对多关系,但我希望在新表(MessageReceivers)中对两个列都有唯一的约束(AdvanceMessageId,UserId):

mapping.HasManyToMany(x => x.Receivers)
       .WithParentKeyColumn("AdvanceMessageId")
       .WithChildKeyColumn("UserId")
       .Cascade.All()
       .LazyLoad()
       .WithTableName("MessageReceivers");
Run Code Online (Sandbox Code Playgroud)

感谢帮助

many-to-many unique fluent-nhibernate

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

调试多线程应用程序的建议

我在Visual Studio 2008中逐步调试多线程.NET应用程序时遇到问题.

随着每个阶梯线,Visual Studio变得越来越慢(跳转到下一行需要越来越多的时间)并且通常在几行之后挂起(我得到"Visual Studio忙"气球提示),我需要停止调试.

我怀疑问题是由于应用程序连接了几个TCP/IP客户端,这意味着每次我创建一个断点,他的网络缓冲区都会被填满,直到我继续我的应用程序.每当我使用F10步骤到下一行代码时,Visual Studio会很快唤醒所有其他线程以便它们处理输入数据.

有没有人有这些问题的经验,以及如何避免这些问题的建议?

.net debugging multithreading visual-studio

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

是否可以直接使用 Microsoft.Win32 命名空间中的 Win32Native 类?

有没有办法直接使用Win32Native命名空间?

我想直接调用该方法:

Win32Native.SendMessageTimeout(new IntPtr(0xffff), 0x1a, IntPtr.Zero, "Environment", 0, 0x3e8, IntPtr.Zero) == IntPtr.Zero;    
Run Code Online (Sandbox Code Playgroud)

而不是声明它:

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(IntPtr hWnd, int Msg, IntPtr wParam, string lParam, uint fuFlags, uint uTimeout, IntPtr lpdwResult);
Run Code Online (Sandbox Code Playgroud)

有这样的机会吗?

c# environment-variables

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

带返回值的C void函数

至于我知道void函数中的return语句将引发错误

但是在下面的程序中不是这样

这里显示输出1,为什么?

main()
{
    int i=5;
    printf("%d",fun(fun(fun(i))));
}

void fun(int i)
{
    if (i%2)
    {
        return (i+(7*4)-(5/2)+(2*2));
    }
    else
    {
        return (i+(17/5)-(34/15)+(5/2));
    }
}
Run Code Online (Sandbox Code Playgroud)

c

5
推荐指数
2
解决办法
1039
查看次数

.NET 中的后续写入是否可以由运行时或处理器重新排序?

我有不可变的对象,我希望延迟计算其哈希码。我已经实施了

private bool _HasHashCode = false;
private int _HashCode;
public override int GetHashCode()
{
    if (_HasHashCode)
        return _HashCode;

    long hashCode;
    unchecked
    {
        hashCode = Digits;
        hashCode = (hashCode*397) ^ XI;
        hashCode = (hashCode*397) ^ YI;
        hashCode = (int) ( hashCode % Int32.MaxValue);
    }

    // is it possible that these two write instructions
    // get reordered on a certain .NET/CPU architecture 
    // combination:

    _HashCode = (int)hashCode;
    _HasHashCode = true;

    return _HashCode;
}
Run Code Online (Sandbox Code Playgroud)

我的推理是,32 位 _HashCode 成员是 32 位,写入它是原子的,因此即使由于设置 _HasHashCode 属性时的竞争条件而运行两次计算也没关系 …

c# memory-model thread-safety

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

如何使用LINQ获取集合中的第二个元素?

我有一个愚蠢的问题.我有一个数据库,我需要获得第二项不仅是第一项.我打开第一个简单的方法

var source = _context.SourceLogs.Where(a => a.SourceID == user.ID).First()

但我不知道如何打开第二个.我是C#的新手,所以我唯一想到的就是这个

var source = _context.SourceLogs.Where(a => a.SourceID == user.ID).First(-1)

但这显然不起作用.任何形式的帮助表示赞赏.谢谢.

c# linq

5
推荐指数
2
解决办法
7526
查看次数

如何为依赖于其他服务或数据库的服务编写单元测试

对不起,如果我问的是非常基本的问题,

我有一组Web服务(使用.Net WebApi开发).这些服务是业务层或数据访问层API.这些API要么依赖于其他服务,要么依赖于数据库本身.

我想为它编写单元测试用例.我有以下问题

  1. 由于业务层API依赖于数据访问服务或其他一些服务.如果我只是为了调用业务API而编写单元测试,那么它将调用数据访问API.这是编写单元测试用例的正确方法吗?或者我应该使用单元测试注入所有依赖项对象?我认为之前的一个是集成测试而不是单元测试.

  2. 我应该为数据访问层编写单元测试吗?我检查了这个链接(编写数据访问代码测试:单元测试是浪费),它说DAL不需要单元测试.我还应该为数据访问层编写测试吗?我认为这将是集成测试而不是单元测试?

.net c# integration-testing unit-testing moq

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