Error: Extension methods must be defined in a top level static class (CS1109)
18,250
The error message says exactly what's wrong: your IntExt
method isn't a top-level static class. It's a nested static class. Just pull it out of MainForm
and it'll be fine.
Comments
-
Patrick R almost 2 years
I'm trying to make a countdown program, which I can start and stop and set the value of the countdown to 10 minutes if needed.
But I'm getting an error I don't quite understand. I'm not that into C#, so here's the code:
Can some one help me a bit here ? Think I run on framework 3.0 or something ?
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Timers; namespace PauseMaster { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { } private DateTime endTime; private void btnStartStop_Click(object sender, EventArgs e) { if(btnStartStop.Text == "START") { int hours = int.Parse(string.IsNullOrEmpty(txtCountFromHour.TextBox.Text) || txtCountFromHour.TextBox.Text == "timer" ? "0" : txtCountFromHour.TextBox.Text); int mins = int.Parse(string.IsNullOrEmpty(txtCountFromMin.TextBox.Text) || txtCountFromMin.TextBox.Text == "minutter" ? "0" : txtCountFromMin.TextBox.Text); int secs = int.Parse(string.IsNullOrEmpty(txtCountFromSec.TextBox.Text) || txtCountFromSec.TextBox.Text == "sekunder" ? "0" : txtCountFromSec.TextBox.Text); endTime = DateTime.Now.AddHours(hours).AddMinutes(mins).AddSeconds(secs); timer1.Enabled = true; btnStartStop.Text = "STOP"; } else { timer1.Enabled = false; btnStartStop.Text = "START"; } } private void timer1_Tick(object sender, EventArgs e) { if (endTime <= DateTime.Now) { timer1.Enabled = false; lblTimer.Text = "00:00:00"; btnStartStop.Text = "Start"; return; } TimeSpan ts = endTime - DateTime.Now; lblTimer.Text = string.Format("{0}:{1}:{2}.{3}", ts.Hours.AddZero(), ts.Minutes.AddZero(), ts.Seconds.AddZero()); } public static class IntExt { public static string AddZero(this int i) // GETTING ERROR HERE AT 'AddZero' { int totLength = 2; int limit = (int)Math.Pow(10, totLength - 1); string zeroes = ""; for (int j = 0; j < totLength - i.ToString().Length; j++) { zeroes += "0"; } return i < limit ? zeroes + i : i.ToString(); } } } }
-
Patrick R over 11 yearsThanks, but now im getting this one: The namespace 'PauseMaster' already contains a definition for 'IntExt' (CS0101)
-
Jon Skeet over 11 years@PatrickR: So, that suggests you've already got such a class (which should be called
Int32Ext
orInt32Extensions
, btw). Assuming that's already a static non-generic class, just moveAddZero
into there. -
Patrick R over 11 yearsSorry if im an idiot here, but cant seem to find any other class's called Int32Ext or Int32Extensions. Altho i had another .cs file where the IntExt was again, deleted it and got 9 new error's .. totally lost here :: new errors: 'System.Windows.Forms.TextBox' does not contain a definition for 'TextBox' and no extension method 'TextBox' accepting a first argument of type 'System.Windows.Forms.TextBox' could be found
-
Jon Skeet over 11 years@PatrickR: Why did you delete the existing
IntExt
? I only said it should be calledInt32Ext
in order to follow .NET naming conventions. You should add theAddZero
method to the existing class, then rename it. I've no idea where theTextBox
errors came from though, and without seeing the code it's really impossible to guess... -
dalemac over 6 yearsYeah, this solves the problem by no longer having the method act like an extension method, so it cannot be applied to types! Not a solution if you actually want to use extension methods!