【问题标题】:How to declare methods inside methods如何在方法中声明方法
【发布时间】:2014-05-07 11:44:25
【问题描述】:

我有这样的课:

public Class Work
{
   public DataTable GetWork()
      {
         //return a datatable which contains information about working hourse

      }

}

我想在 GetWork 方法中声明另一个方法。

实际上我想创建一个类,我可以在其中调用这样的东西:

DataTable myData=Work.GetWork.ToDays()//Returns work days
DataTable myOtherData=Work.GetWork.ToHour();//Returns work hours

我怎样才能达到上述状态? 在此先感谢并原谅我糟糕的英语:(

【问题讨论】:

  • 您的 GetWork 示例不是一种方法。请清理您的代码,以便我们更好地理解它。
  • 您不能在方法中声明方法。这太荒谬了。如果GetWork 返回的对象具有ToDays 方法,Work.GetWork.ToDays() 是可能的,但您仍然需要以这种方式调用它Work.GetWork().ToDays()
  • @Tarec - 匿名方法呢?荒诞有点尖锐。 &Nick - 很明显,OP 可能并不精通,如果违反了一些论坛规则,我们可以对菜鸟更有礼貌,让他们指出去哪里看。
  • @brumScouse 我仍然希望,在尝试使用像他们的示例这样的两种方法进行编码时,他们会修复他们的示例导致的基本编译器错误,这与他们的问题无关。

标签: c# class


【解决方案1】:

您可以使用Extension Methods 来实现此目的。
示例:

public static class DataTableExtensionMethods
{
  public static int ToDays(this DataTable dt)
  {
    // fetch and return the days.
  }
}

现在你可以这样称呼它:

var myDays = Work.GetWork().ToDays();

【讨论】:

    【解决方案2】:

    你不能在另一个方法中定义一个方法。

    您可以做的是在您的类中创建一个属性,如下所示:

    public class Work
    {
        public static DataTable WorkProperty
        {
            get
            {
                //return a datatable which contains information about working hourse
    
            }
        }
    }
    

    现在,定义您的 GetWorkInHoursGetWorkInDays 方法,以便它们将 DataTable 作为参数,并返回一个 DataTable,然后在里面执行您的操作。

    现在,你可以做类似的事情

    DataTable myData=Work.WorkProperty.GetWorkInDays()//Returns work days
    DataTable myOtherData=Work.WorkProperty.GetWorkInHours();//Returns work hours
    

    【讨论】:

    • 尽量避免静电。
    • @L-Three 这只是为了让属性可以在Work 类本身上调用,而不是在实例上调用,正如 OP 所要求的那样。此外,将其设置为静态是有意义的,因为所有对象的值都是相同的。
    【解决方案3】:

    创建一个自定义 DataTable 类,您可以在其中实现 ToDaysToHour 操作。

    例子:

     public class Work
     {
         public MyDataTable GetWork()
         {
              //return a datatable which contains information about working hourse
    
         } 
     }
    
     public class MyDataTable : DataTable
     {
          public int ToDays()
          {
              // todo: implement
          }
          public int ToHour()
          {
              // todo: implement
          }
     }
    

    我喜欢这种扩展方法的方法,因为您将逻辑放在逻辑所属的位置,并且无需添加 using 语句即可自动使用。

    【讨论】:

      【解决方案4】:

      你必须创建另一个类

      public class Work
      {
          public DataTable GetWork()
          {
              DataTable result;
      
              //create result
      
              return result;
          }
      }
      
      public class DataTable 
      {
          // properties
      
          // int or other type...
          public int ToDays()
          {
               // return a property
               return something;
          }
      
          // int or other type...
          public int ToHours()
          {
               // return a property
               return something;
          }
      }
      

      你可以调用你的结果:

      var myData = Work.GetWork().ToDays()//Returns work days
      var myOtherData  =Work.GetWork().ToHour();//Returns work hours
      

      (确保 GetWork() 总是返回不为空的东西)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多