小编Hun*_*ter的帖子

掌握递归编程

我在思考/解决递归问题时遇到了麻烦.我真的很欣赏这个概念,我可以理解它们,比如创建基本案例,退出案例和递归调用等.我可以解决简单的问题,比如在数组中编写阶乘或整数求和.这就是我的想法停止的地方.当问题变得复杂时,我无法真正应用概念或提出解决方案.例如,河内的塔,虽然我能理解问题和解决方案,但我,我自己无法解决问题.它也适用于其他算法,如快速排序/二叉树遍历.所以我的问题是

  1. 掌握它的最佳方法是什么?
  2. 任何人都可以建议一系列问题或问题,我可以将其作为练习来练习吗?
  3. 学习功能语言会帮助我理解吗?

请指教.

algorithm recursion recursive-datastructures data-structures

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

设计原则高风扇与高风扇输出

有谁可以用一个例子向我解释一下这个问题?我自相矛盾了

  • 高扇入:一个给定的类,其设计方式使得大量其他类可以轻松使用它.
  • 高扇出:一堂课应该使用很多其他课程.

两者似乎都是自相矛盾的.可以用一个例子解释一下吗?可能在.NET框架中.

.net c# design-patterns

7
推荐指数
3
解决办法
8278
查看次数

为什么Struct内部的属性顺序会改变实例的大小?

我有一个包含以下字段的结构

public struct Person
    {
        public int Age;
        public short Id;
        public byte Marks;
    }
Run Code Online (Sandbox Code Playgroud)

当我初始化它并检查内存大小时,我的大小为8.

Person instance = new Person {Age = 10, Id = 1,Marks = 75};
Console.WriteLine(Marshal.SizeOf(instance));
Run Code Online (Sandbox Code Playgroud)

但是,当我更改下面的顺序并执行它时,我得到的大小为12.

public struct Person
    {
        public byte Marks;//1 byte
        public int Age;//4
        public short Id;//2
    }
Run Code Online (Sandbox Code Playgroud)

理想情况下,它应该是7个字节.但是,从这个链接msdn我可以理解开销分配确实发生了.但是,为什么它不一致?为什么struct中的属性顺序决定了它的实例的大小?

.net c# memory-management

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

避免在c#中使用多个If - 最佳实践

场景:假设我们要检查地址线.其中包括addressline1,addressline2,Town,Country,Postcode如果输入任何一个属性,则所有其他字段都是必填字段.如果没有输入,验证不必被触发.

为了实现它,我最终得到了两行If语句.喜欢

if(AddressLine1 != null || AddressLine2 != null || Town != null || Country != null)
{
    if(AddressLine1 != null && AddressLine2 != null && Town != null && Country != null) == false
     {
          return false;
     }   
}
Run Code Online (Sandbox Code Playgroud)

注意:我使用的是c#.有没有我可以使用的语言结构.

programming-languages c#-3.0

4
推荐指数
3
解决办法
204
查看次数

Linq to Entities查询Nullable数据类型

我有一个场景,我们正在对数据库中的行进行软删除.我想要包含未删除的行.如何使用LINQ实现它.

from c in context.ASDSet
where (c => c.DeletedFlag.HasValue && !c.DeletedFlag.Value)
Run Code Online (Sandbox Code Playgroud)

但我无法达到结果.

我希望生成的SQL具有以下形式:

select *  from table where IsNull(column, 0) = 0
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-entities

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

线程:锁定在引擎盖下

当我们使用锁定对象时会发生什么?我知道它运行时使用了monitor.Enter和Exit方法.但真正发生在引擎盖下的是什么?为什么只有用于锁定的引用类型?即使用于完成锁定的对象发生了变化,为什么它还能提供线程安全性呢?

在当前样本中,我们正在修改用于锁定目的的对象.理想情况下,这不是一种优选的方法,最佳实践是使用专用的私有范围变量.

static List<string> stringList = new List<string>();
    static void AddItems(object o)
    {
        for (int i = 0; i < 100; i++)
        {
            lock (stringList)
            {
                Thread.Sleep(20);
                stringList.Add(string.Format("Thread-{0},No-{1}", Thread.CurrentThread.ManagedThreadId, i));
            }
        }
        string[] listArray = null;

        lock(stringList)
        listArray = stringList.ToArray();

        foreach (string s in listArray)
        {
            Console.WriteLine(s);
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# multithreading locking

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

Rx:CurrentThreadScheduler和ImmediateScheduler之间的区别

有谁能描述currentThreadScheduler和ImmediateScheduler之间的区别?对于下面的代码,我看不出它有什么不同?

        var rates = new List<FxRates>()
        {
            new FxRates() {CurrencyPair = "USD/GBP", BidPrice = 2.01m, AskPrice = 2.00m},
            new FxRates() {CurrencyPair = "USD/Eur", BidPrice = 1.3m, AskPrice = 1.31m},
            new FxRates() {CurrencyPair = "GBP/Eur", BidPrice = .8m, AskPrice = .81m}
        };

        var observable = rates.ToObservable(ImmediateScheduler.Instance);//Change to CurrentThreadScheduler
        observable.Subscribe(
            rate => Console.WriteLine("ThreadId:{0}, IsBackground:{1}, CurrencyPair:{2}",
                Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsBackground, rate.CurrencyPair));
Run Code Online (Sandbox Code Playgroud)

c# system.reactive

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