I am new with C#, I have this error with my class.
Extension method must be defined in a non-generic static class
I just searched and found many reasons that could make this error..such as adding static to class name and other..Can you help me find why this error comes for class?
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace LandManagment
{
class weather
{
private string xml;
private string FullTextXML;
private string PartTextXML;
public List<Forcast> forcastlist;
public Wind wind;
public Astronomy astronomy;
public Atmosphere atmosphere;
public Condition condition;
public struct Forcast
{
public Forcast(string day, string date, string low, string high, string text, string code)
{
Day = day;
Date = date;
Low = low;
High = high;
Text = text;
Code = code;
}
public string Day { get; private set; }
public string Date { get; private set; }
public string Low { get; private set; }
public string High { get; private set; }
public string Text { get; private set; }
public string Code { get; private set; }
}
public struct Wind
{
public Wind(string chill, string direction, string speed)
{
Chill = chill;
Direction = direction;
Speed = speed;
}
public string Chill { get; private set; }
public string Direction { get; private set; }
public string Speed { get; private set; }
}
public struct Astronomy
{
public Astronomy(string sunrise, string sunset)
{
Sunrise = sunrise;
Sunset = sunset;
}
public string Sunrise { get; private set; }
public string Sunset { get; private set; }
}
public struct Atmosphere
{
public Atmosphere(string humidity, string visibility, string pressure, string rising)
{
Humidity = humidity;
Visibility = visibility;
Pressure = pressure;
Rising = rising;
}
public string Humidity { get; private set; }
public string Visibility { get; private set; }
public string Pressure { get; private set; }
public string Rising { get; private set; }
}
public struct Condition
{
public Condition(string text, string code, string temp)
{
Text = text;
Code = code;
Temp = temp;
}
public string Text { get; private set; }
public string Code { get; private set; }
public string Temp { get; private set; }
}
private string GetStr(string str) {
try {
int index1;
int index2;
index1 = (str.IndexOf("<![CDATA[") + "<![CDATA[".Length);
index2 = str.IndexOf("]]>");
string str1 = str.Substring(index1, (index2 - index1));
// MsgBox(str1)
return str1;
}
catch (Exception ex) {
return "Error";
}
}
private string getXML() {
return FullTextXML;
}
private void GetWind() {
int index1;
int index2;
string NewString;
index1 = (PartTextXML.IndexOf("<yweather:wind") + "<yweather:wind".Length);
NewString = PartTextXML.Substring(index1);
index2 = NewString.IndexOf("/>");
string TodayWind= NewString.Substring(0, index2).ToLower();
//speed
index1 = TodayWind.IndexOf("speed");
string NewStr = TodayWind.Substring(index1);
index2 = NewStr.IndexOf(" ");
string ss = NewStr.Substring(0, index2);
string[] arr = ss.Split('=');
string speed = FormatString(arr[1].Replace("\"", ""));
//direction
index1 = TodayWind.IndexOf("direction");
NewStr = TodayWind.Substring(index1);
index2 = NewStr.IndexOf(" ");
ss = NewStr.Substring(0, index2);
arr = ss.Split('=');
string direction = FormatString(arr[1].Replace("\"", ""));
//chill
index1 = TodayWind.IndexOf("chill");
NewStr = TodayWind.Substring(index1);
index2 = NewStr.IndexOf(" ");
ss = NewStr.Substring(0, index2);
arr = ss.Split('=');
string chill = FormatString(arr[1].Replace("\"", ""));
wind = new Wind(speed, direction, chill);
}
public void GetAstronomy() {
int index1;
int index2;
string NewString;
index1 = (PartTextXML.IndexOf("<yweather:astronomy") + "<yweather:astronomy".Length);
NewString = PartTextXML.Substring(index1);
index2 = NewString.IndexOf("/>");
String TodayAstronomy = NewString.Substring(0, index2).ToLower();
//sunrise
index1 = TodayAstronomy.IndexOf("sunrise");
string NewStr = TodayAstronomy.Substring(index1);
index2 = NewStr.IndexOf(" am");
string ss = NewStr.Substring(0, index2);
string[] arr = ss.Split('=');
String sunrise = (FormatString(arr[1].Replace("\"", "")) + "am");
//sunset
index1 = TodayAstronomy.IndexOf("sunset");
NewStr = TodayAstronomy.Substring(index1);
index2 = NewStr.IndexOf(" pm");
ss = NewStr.Substring(0, index2);
arr = ss.Split('=');
String sunset = (FormatString(arr[1].Replace("\"", "")) + "pm");
astronomy = new Astronomy(sunrise, sunset);
}
private void GetAtmosphere()
{
int index1;
int index2;
string NewString;
index1 = (PartTextXML.IndexOf("<yweather:atmosphere") + "<yweather:atmosphere".Length);
NewString = PartTextXML.Substring(index1);
index2 = NewString.IndexOf("/>");
string TodayAtmosphere = NewString.Substring(0, index2).ToLower();
//humidity
index1 = TodayAtmosphere.IndexOf("humidity");
string NewStr = TodayAtmosphere.Substring(index1);
index2 = NewStr.IndexOf(" ");
string ss = NewStr.Substring(0, index2);
string[] arr = ss.Split('=');
string humidity = FormatString(arr[1].Replace("\"", ""));
//visibility
index1 = TodayAtmosphere.IndexOf("visibility");
NewStr = TodayAtmosphere.Substring(index1);
index2 = NewStr.IndexOf(" ");
ss = NewStr.Substring(0, index2);
arr = ss.Split('=');
string visibility = FormatString(arr[1].Replace("\"", ""));
//pressure
index1 = TodayAtmosphere.IndexOf("pressure");
NewStr = TodayAtmosphere.Substring(index1);
index2 = NewStr.IndexOf(" ");
ss = NewStr.Substring(0, index2);
arr = ss.Split('=');
string pressure = FormatString(arr[1].Replace("\"", ""));
//rising
index1 = TodayAtmosphere.IndexOf("rising");
NewStr = TodayAtmosphere.Substring(index1);
index2 = NewStr.IndexOf(" ");
ss = NewStr.Substring(0, index2);
arr = ss.Split('=');
string rising = FormatString(arr[1].Replace("\"", ""));
atmosphere = new Atmosphere(humidity, visibility, pressure, rising);
}
private void GetCondition()
{
int index1;
int index2;
string NewString;
index1 = (PartTextXML.IndexOf("<yweather:condition") + "<yweather:condition".Length);
NewString = PartTextXML.Substring(index1);
index2 = NewString.IndexOf("/>");
String TodayCondition = NewString.Substring(0, index2).ToLower();
//temp
index1 = TodayCondition.IndexOf("temp");
string NewStr = TodayCondition.Substring(index1);
index2 = NewStr.IndexOf(" ");
string ss = NewStr.Substring(0, index2);
string[] arr = ss.Split('=');
string temp = FormatString(arr[1].Replace("\"", ""));
//code
index1 = TodayCondition.IndexOf("code");
NewStr = TodayCondition.Substring(index1);
index2 = NewStr.IndexOf(" ");
ss = NewStr.Substring(0, index2);
arr = ss.Split('=');
string code = FormatString(arr[1].Replace("\"", ""));
//text
index1 = TodayCondition.IndexOf("text");
NewStr = TodayCondition.Substring(index1);
index2 = NewStr.IndexOf(" ");
ss = NewStr.Substring(0, index2);
arr = ss.Split('=');
string text = FormatString(arr[1].Replace("\"", ""));
condition = new Condition(text, code, temp);
}
public void GetForecast()
{
for (int i = 0; i < 2; i++)
{
int index1;
int index2;
string NewString;
index1 = (NthIndexOf(PartTextXML, "<yweather:astronomy", i+1) + "<yweather:astronomy".Length);
NewString = PartTextXML.Substring(index1);
index2 = NewString.IndexOf("/>");
string forc=NewString.Substring(0, index2).ToLower();
//low
index1 = forc.IndexOf("low");
string NewStr = forc.Substring(index1);
index2 = NewStr.IndexOf(" ");
string ss = NewStr.Substring(0, index2);
string[] arr = ss.Split('=');
String Low = arr[1].Replace("\"", "");
//high
index1 = forc.IndexOf("high");
NewStr = forc.Substring(index1);
index2 = NewStr.IndexOf(" ");
ss = NewStr.Substring(0, index2);
arr = ss.Split('=');
String High = arr[1].Replace("\"", "");
//text
index1 = forc.IndexOf("text");
NewStr = forc.Substring(index1);
index2 = NewStr.IndexOf(" ");
ss = NewStr.Substring(0, index2);
arr = ss.Split('=');
String text = arr[1].Replace("\"", "");
//text
index1 = forc.IndexOf("code");
NewStr = forc.Substring(index1);
index2 = NewStr.IndexOf(" ");
ss = NewStr.Substring(0, index2);
arr = ss.Split('=');
String code = arr[1].Replace("\"", "");
//day
index1 = forc.IndexOf("day");
NewStr = forc.Substring(index1);
index2 = NewStr.IndexOf(" ");
ss = NewStr.Substring(0, index2);
arr = ss.Split('=');
String day = arr[1].Replace("\"", "");
//date
index1 = forc.IndexOf("date");
NewStr = forc.Substring(index1);
index2 = NewStr.IndexOf(" ");
ss = NewStr.Substring(0, index2);
arr = ss.Split('=');
String date = arr[1].Replace("\"", "");
forcastlist.Insert(i,new Forcast(day,date,Low,High,text,code));
}
}
private static int NthIndexOf(this string target, string value, int n)
{
Match m = Regex.Match(target, "((" + value + ").*?){" + n + "}");
if (m.Success)
return m.Groups[2].Captures[n - 1].Index;
else
return -1;
}
public weather(string w, string U) {
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
string str = ("http://xml.weather.yahoo.com/forecastrss?w="
+ (w + ("&u=" + U)));
try {
// Load data
doc.Load(str);
str = doc.OuterXml;
FullTextXML = doc.OuterXml;
PartTextXML = GetStr(str);
this.GetAstronomy();
this.GetAtmosphere();
this.GetCondition();
this.GetForecast();
}
catch (Exception ex) {
str = "null";
FullTextXML = "null";
throw new Exception("Null XML");
}
}
private string FormatString(String sss) {
char c = sss[0];
c = c.ToString().ToUpper()[0];
string str="";
str = (c + sss.Substring(1));
return str;
}
}
}
I tried to change public static class
as Extension methods must be defined in a non-generic static class said but got error :(
thanks for your help