Erreur: les méthodes d'Extension doit être défini dans un haut niveau statique de la classe (CS1109)
Je suis en train de faire un compte à rebours programme, que je peux commencer et d'arrêter et de définir la valeur du compte à rebours de 10 minutes si besoin.
Mais j'obtiens une erreur que je ne comprends pas très bien.
Je ne suis pas en C#, donc voici le code:
Peut quelqu'un m'aider un peu ici ? Pense que je lance sur framework 3.0 ou quelque chose ?
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();
}
}
}
}
OriginalL'auteur Patrick R | 2012-10-25
Vous devez vous connecter pour publier un commentaire.
Le message d'erreur indique exactement quel est le problème: votre
IntExt
méthode n'est pas un haut niveau statique de la classe. C'est un imbriquée statique de la classe. Sortis deMainForm
et ça va être bien.Donc, ce qui suggère que vous avez déjà obtenu une telle classe (ce qui devrait être appelé
Int32Ext
ouInt32Extensions
, btw). En supposant que c'est déjà une statique non-classe générique, il suffit de déplacerAddZero
là.Désolée si je suis un idiot ici, mais ne peux pas l'air de trouver tout les autres de la classe appelée Int32Ext ou Int32Extensions. Bien que j'ai eu un autre .cs fichier où la IntExt a de nouveau été supprimés, et a obtenu 9 nouvelle erreur .. totalement perdu ici :: nouvelles erreurs: 'Système.De Windows.Les formulaires.Zone de texte " ne contient pas une définition pour 'zone de texte' et aucune méthode d'extension 'zone de texte' acceptant un premier argument de type 'System.De Windows.Les formulaires.Zone de texte' a pu être trouvé
Pourquoi avez-vous supprimer l'existant
IntExt
? J'ai seulement dit qu'il devrait être appeléInt32Ext
, afin de le suivre .NET des conventions de nommage. Vous devez ajouter leAddZero
méthode de la classe existante, renommer. Je n'ai aucune idée de l'endroit où leTextBox
erreurs venaient de bien, et sans voir le code, il est vraiment impossible de deviner...OriginalL'auteur Jon Skeet
Je sais que cette question est ancienne, mais au cas où quelqu'un d'autre s'exécute dans ce problème...
Assurez-vous que le mot-clé "this" n'est pas dans le nom du paramètre définition (généralement de copier/coller ou glisser)
Donc, remplacer:
:
Qui devrait résoudre votre problème.
OriginalL'auteur dougczar