小编mo.*_*mo.的帖子

产量突破; - 疯狂的行为

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main (string[] args)
        {
            var test1 = Test1(1, 2);
            var test2 = Test2(3, 4);
        }

        static IEnumerable Test1(int v1, int v2)
        {
            yield break;
        }

        static IEnumerable Test2 (int v1, int v2)
        {
            return new String[] { };
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

"test1"似乎是一个IEnumerable,其中v1和v2(params)为字段,而"Test1"未被调用.

"Test2"工作"设计":)

这是怎么回事?

.net c# yield break

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

c#中的友好课程

实际上我重构了一部分代码.我想要做的是用对象"TaskArgument"初始化一个对象"任务".我们说"TaskArgument"是抽象的,"Task"实现了一个方法"OnEnterTask(TaskArgument args)"并且是密封的(对于现有系统的某些特殊行为,这超出了范围).

旧代码:

public sealed class Task : SomeSystemBaseTask {
  private int accessMe; 
  private int meToo;

  public void OnEnterTask(TaskArgument args) {
    if (args is SimpleTaskArgument) {
      accessMe = ((SimpleTaskArgument)args).uGotIt;
      meeToo = 0;
    } else if (args is ComplexTaskArgument) {
      accessMe = ((ComplexTaskArgument)args).uGotItValue * ((ComplexTaskArgument)args).multiplier;
      meToo = ((ComplexTaskArgument)args).multiplier - 1;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

什么是避免类型检查的最佳做法?我的第一个愚蠢的想法是:

public abstract class TaskArgument {
    internal public abstract Initialize(Task args);
}

public class SimpleTaskArgument : TaskArgument {
    public int uGotIt = 10;

    internal public Initialize(Task task){
        task.accessMe …
Run Code Online (Sandbox Code Playgroud)

.net c# oop design-patterns init

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

递归条件 - 最佳实践

什么是打破循环的最佳做法?我的想法是:

Child Find(Parent parent, object criteria)
{
    Child child = null;

    foreach(Child wannabe in parent.Childs)
    {
        if (wannabe.Match(criteria))
        {
            child = wannabe;
        }
        else
        {
            child = Find(wannabe, criteria);
        }

        if (child != null) break;
    }

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

要么

Child Find(Parent parent, object criteria)
{
    Child child = null;
    var conditionator = from c in parent.Childs where child != null select c;

    foreach(Child wannabe in conditionator)
    {
        if (wannabe.Match(criteria))
        {
            child = wannabe;
        }
        else
        {
            child = Find(wannabe, …
Run Code Online (Sandbox Code Playgroud)

.net c# recursion conditional

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

标签 统计

.net ×3

c# ×3

break ×1

conditional ×1

design-patterns ×1

init ×1

oop ×1

recursion ×1

yield ×1