方法定义在MVC控制器中

时间:2016-01-29 17:29:40

标签: c# asp.net-mvc

我需要在MVC控制器中实现一个方法。控制器是

public class OurBoxesController : Controller

和方法

public static DateTime Next(this DateTime from, DayOfWeek dayOfWeek)
    {
        int start = (int)from.DayOfWeek;
        int target = (int)dayOfWeek;
        if (target <= start)
            target += 7;
        return from.AddDays(target - start);
    }

我有这个错误“扩展方法必须在非泛型静态类中定义”。我理解,但我不明白我必须把方法用在控制器中。谢谢

4 个答案:

答案 0 :(得分:2)

正如错误所述,您必须将其置于非通用静态类中。像这样:

public static class DateTimeExtensions
{
    public static DateTime Next(this DateTime from, DayOfWeek dayOfWeek)
    {
        int start = (int)from.DayOfWeek;
        int target = (int)dayOfWeek;
        if (target <= start)
            target += 7;
        return from.AddDays(target - start);
    }
}

或者,如果您希望该方法位于您的控制器中,则它不能作为扩展方法:

public static DateTime Next(DateTime from, DayOfWeek dayOfWeek)
{
    int start = (int)from.DayOfWeek;
    int target = (int)dayOfWeek;
    if (target <= start)
        target += 7;
    return from.AddDays(target - start);
}

答案 1 :(得分:1)

您尝试添加的方法被视为extension method

var dateTime = DateTime.Now;
var nextMonday = dateTime.Next(DayOfWeek.Monday);

扩展方法必须放在public static class ExtensionsMethods中(类的名称无关紧要)。

您可以将此方法添加为非扩展方法(即删除this关键字),也可以将其添加到OurBoxesController类之外的静态类中。

答案 2 :(得分:0)

您必须在静态类中执行此操作。

像这样:

static class ExtensionHelper
{

public static DateTime Next(this DateTime from, DayOfWeek dayOfWeek)
    {
        int start = (int)from.DayOfWeek;
        int target = (int)dayOfWeek;
        if (target <= start)
            target += 7;
        return from.AddDays(target - start);
    }
}

希望这个帮助

答案 3 :(得分:0)

您需要在方法定义中删除this。通过将this放在 参数之前,您将该方法作为扩展方法,并且必须在静态非泛型类

中定义
public static DateTime Next(DateTime from, DayOfWeek dayOfWeek)

Extension Methods (C# Programming Guide)