小编Gua*_*apo的帖子

用C#学习单一责任原则

我正在努力学习单一责任原则(SRP),但这是非常困难的,因为我很难弄清楚我应该从一个班级中删除的时间和内容,以及我应该放置/组织它的地方.

我正在谷歌搜索一些材料和代码示例,但我找到的大多数材料,而不是让它更容易理解,使它很难理解.

例如,如果我有一个用户列表,并且从该列表中我有一个叫做控制的类,可以执行很多事情,例如当用户进/出时发送问候和再见消息,验证用户应该能够进入的天气并踢他,接收用户命令和消息等.

从示例中你不需要太多了解我已经在一个类中做了太多但是我不清楚如何在之后拆分和重新组织它.

如果我理解SRP,我会有一个加入频道的课程,问候和再见,一个用户验证课程,一个阅读命令的课程,对吧?

但是我在哪里以及如何使用踢球?

我有验证课程,所以我相信我会在那里进行各种用户验证,包括天气或者不应该踢用户.

因此,kick函数将位于通道连接类中,并在验证失败时被调用?

例如:

public void UserJoin(User user)
{
    if (verify.CanJoin(user))
    {
        messages.Greeting(user);
    }
    else
    {
        this.kick(user);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你们可以借助易于理解的C#在线和免费资料,或者通过向我展示如何分割引用的示例以及可能的一些示例代码,建议等,我将不胜感激.

c# single-responsibility-principle solid-principles

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

更改文本框高度?

如何更改文本框的高度?

以下两项都不奏效:

this.TextBox1.Size = new System.Drawing.Size(173, 100);
Run Code Online (Sandbox Code Playgroud)

要么

this.TextBox1.Size.Height = 100;
Run Code Online (Sandbox Code Playgroud)

我希望能够更改单行文本框高度以适应其上的字体大小,如果可能的话不使用多行.

c# textbox .net-3.5 winforms

46
推荐指数
5
解决办法
16万
查看次数

电子邮件地址的可接受字段类型和大小?

可能重复:
常见的mySQL字段及其相应的数据类型
名称的推荐数据库列大小是多少?

我正在寻找将电子邮件地址存储到mysql表中的最正确的字段类型和大小.

我最初考虑varchar 255,但我认为255可能是太多甚至太少,我能够捕获所有有效的电子邮件地址的平均大小是多少?

mysql size email-address fieldtype

44
推荐指数
3
解决办法
6万
查看次数

zlib压缩字节数组?

我有这个未压缩的字节数组:

0E 7C BD 03 6E 65 67 6C 65 63 74 00 00 00 00 00 00 00 00 00 42 52 00 00 01 02 01
00 BB 14 8D 37 0A 00 00 01 00 00 00 00 05 E9 05 E9 00 00 00 00 00 00 00 00 00 00
00 00 00 00 01 00 00 00 00 00 81 01 00 00 00 00 00 00 00 00 00 00 00 00 00 …
Run Code Online (Sandbox Code Playgroud)

c# compression bytearray zlib

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

将类序列化为XML?

我有以下类和持有它的列表:

public class Transport
{
    public string TransportType { get; set; }
    public string Mode { get; set; }
    public class Coordinates
    {
        public float ID { get; set; }
        public float LocX { get; set; }
        public float LocY { get; set; }
        public float LocZ { get; set; }
        public ObjectState State { get; set; }
        public List<int[]> Connections = new <int[]>();
    }
}

public enum ObjectState
{
    Fly,
    Ground,
    Water
}

public static List<Transport> Tracking = new …
Run Code Online (Sandbox Code Playgroud)

c# xml-serialization

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

VS2010上的单声道?

我想开始做一个可以在Linux和Windows上运行的跨平台项目.

我去单声道的网站查看事情,因为我听说mono允许我在Linux上运行c#,但当我到达那里时http://mono-project.com/Main_Page我有点困惑.

下载页面允许我下载它很好,但为了在VS2010上编程单声道我需要支付单一工具或在VS2010中有任何替代品吗?

总之,我需要能够在VS2010上使用单声道,在没有VS2010的情况下编程单声道的替代方案是什么?

c# installation mono cross-platform

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

XOR链表

我最近遇到了下面的链接,我发现它非常有趣.

http://en.wikipedia.org/wiki/XOR_linked_list

  • 通用调试工具不能遵循XOR链,使调试更加困难; [1]
  • 内存使用量减少的代价是代码复杂性的增加,使维护成本更高;
  • 大多数垃圾收集方案不适用于不包含文字指针的数据结构;
  • 指针的异或未在某些上下文中定义(例如,C语言),尽管许多语言在指针和整数之间提供某种类型的转换;
  • 如果没有遍历列表,则指针将是不可读的 - 例如,如果指向列表项的指针包含在另一个数据结构中;
  • 在遍历列表时,您需要记住先前访问的节点的地址,以便计算下一个节点的地址.

现在我想知道这是否仅适用于低级语言,或者在C#中是否也可以?

是否有任何类似的选项可以用C#产生相同的结果?

c# unsafe linked-list xor xor-linkedlist

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

秒表的替代品?

我正在使用 WPF 制作一个非常简单的秒表,但使用System.Diagnostics秒表非常慢而且根本不可靠,相比之下,我的应用程序每 1 秒的系统时钟在实际时钟上是 3 秒。

我做了一些关于秒表慢的搜索,找到了很多结果但没有解决方案,所以我决定想出我自己的计数器。

这是我想出的一个示例:

System.Windows.Threading.DispatcherTimer _update;
DateTime _started;
bool isRunning = false;
Run Code Online (Sandbox Code Playgroud)

更新线程:

_update = new System.Windows.Threading.DispatcherTimer(new TimeSpan(0, 0, 0, 0, 1), System.Windows.Threading.DispatcherPriority.Normal, delegate
{
    if (isRunning)
        iTimer.Content = new DateTime((DateTime.Now - _started).Ticks).ToString("HH:mm:ss");
}, this.Dispatcher);
Run Code Online (Sandbox Code Playgroud)

我有 2 个按钮,bToggle 负责启动、停止和恢复它,另一个按钮称为 bReset。

private void bReset_Click(object sender, RoutedEventArgs e)
{
    isRunning = false;
    iTimer.Content = "00:00:00";
    bToggle.Content = "Start";
}

private void bToggle_Click(object sender, RoutedEventArgs e)
{
    if ((string)bToggle.Content == "Start")
    {
        isRunning = true;
        _started …
Run Code Online (Sandbox Code Playgroud)

c# wpf stopwatch

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

SelectSingleNode在foreach上返回错误的结果

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(content);

var nodes = doc.DocumentNode.SelectNodes("//div[@class=\"noprint res\"]/div");
if (nodes != null)
{
    foreach (HtmlNode data in nodes)
    {
                  // Works but not what I want
                  MessageBox.Show(data.InnerHtml);

                  // Should work ? but does not ?
                  MessageBox.Show(data.SelectSingleNode("//span[@class=\"pp-place-title\"]").InnerText);
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图解析HTML的结果,foreach的初始节点,按预期工作,并给我10个项目的结果,这些项目符合我的需要.

当我进入foreach时,如果我输出数据项的内部html它显示正确的数据但是如果我输出SelectSingleNode它将始终显示来自foreach的第一项的数据,这是正常行为还是我做错了什么?

为了解决这个问题,我必须在foreach中为每个数据项创建一个新的html,如下所示:

HtmlAgilityPack.HtmlDocument innerDoc = new HtmlAgilityPack.HtmlDocument();
innerDoc.LoadHtml(data.InnerHtml);

// Select what I need
MessageBox.Show(innerDoc.DocumentNode.SelectSingleNode("//span[@class=\"pp-place-title\"]").InnerText);
Run Code Online (Sandbox Code Playgroud)

然后我得到正确的每项数据.

我试图从中获取数据的页面是http://maps.google.com/maps?q=consulting+loc:+US,如果您想尝试看看自己会发生什么.

基本上我正在读公司名称的左侧栏,以上情况发生.

c# .net-4.0 html-parsing html-agility-pack

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

使用自定义指数大小生成2048密钥?

有没有办法生成2048RSA密钥对,使用RSACryptoServiceProvider自定义指数?

new RSACryptoServiceProvider(2048); // = 65537 always
Run Code Online (Sandbox Code Playgroud)

例如,我想将指数设置为65535,但硬编码值似乎是65537.

我环顾四周,但无法找到任何信息.

我正在尝试使用生成密钥对,而不是导入现有密钥RSACryptoServiceProvider.

我知道导入已经存在的密钥,我可以定义模数,指数和其他因素.

如果不可能,我有什么替代品?

c# rsacryptoserviceprovider

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