我想用變量「iso3166TwoLetterCode」的價值,從這個班,Geolocation error with IP address 127.0.0.1ASP.NET初學者問題:如何在classB中使用classA的變量?
在我的新測試類,我該如何使用它?我可以使用它嗎?如果是,如何?我需要這個變量來在if語句中使用它來檢查國家/地區代碼,並根據國家/地區代碼來更改母版頁。
我想用變量「iso3166TwoLetterCode」的價值,從這個班,Geolocation error with IP address 127.0.0.1ASP.NET初學者問題:如何在classB中使用classA的變量?
在我的新測試類,我該如何使用它?我可以使用它嗎?如果是,如何?我需要這個變量來在if語句中使用它來檢查國家/地區代碼,並根據國家/地區代碼來更改母版頁。
我建議你提取這個功能集成到一些實用工具類,你可以從兩個網頁A和網頁B重用:
public class Country
{
public string Name { get; set; }
public string Iso3166TwoLetterCode { get; set; }
public static Country GetCountry(string userHost)
{
IPAddress ipAddress;
if (IPAddress.TryParse(userHost, out ipAddress))
{
return new Country
{
Name = ipAddress.Country(),
Iso3166TwoLetterCode = ipAddress.Iso3166TwoLetterCode()
};
}
return null;
}
}
然後在你的頁面:
protected void Page_Load(object sender, EventArgs e)
{
//Code to fetch IP address of user begins
string userHost = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (String.IsNullOrEmpty(userHost) ||
String.Compare(userHost, "unknown", true) == 0)
{
userHost = Request.Params["REMOTE_ADDR"];
}
Label1.Text = userHost;
var country = Country.GetCountry(userHost);
if (country != null)
{
Label2.Text = country.Name;
Label3.Text = country.Iso3166TwoLetterCode;
}
}
現在可以重用Country
從另一個頁面的類。根據您的要求,您甚至可以通過向函數和返回類型傳遞附加參數進一步對其進行自定義。
不能像原來那樣使用該變量的原因是,它只在本地作用域中定義 - 即編譯器在賦值後到達下一個}時 - 變量和值都消失了。如果你想在同一個類中使用該變量,你可以將它作爲一個類的字段,因爲你需要在另一個類中使用它,你可以使它成爲靜態的(在這種情況下沒有意義),或者使用達林的解決方案。去達林的解決方案( - :