C# 如何将对象变量与字符串进行比较?

C# 如何将对象变量与字符串进行比较?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我使用一个来自表单的字符串来查找数据库中具有相同变量名称的对象。 假设我想在一个充满公交车站的数据库中找到一个名为“Central”的公交车站。如果我找到了一个地址变量,我想将地址变量从“中心”站输入会话(供进一步使用)。数据库运行良好,我可以从中检索其他内容,但问题是比较两个字符串 Session["searchFor"]="Central"; Session["adress"]=null; var db = new Models.DB(); List<Models.Station&g

我使用一个来自表单的字符串来查找数据库中具有相同变量名称的对象。 假设我想在一个充满公交车站的数据库中找到一个名为“Central”的公交车站。如果我找到了一个地址变量,我想将地址变量从“中心”站输入会话(供进一步使用)。数据库运行良好,我可以从中检索其他内容,但问题是比较两个字符串

Session["searchFor"]="Central";
Session["adress"]=null;
var db = new Models.DB();

List<Models.Station> allStations = db.Station.ToList();
foreach (Station station in allStations)
{
    if(String.Compare(Session["searchFor"].toString(), station.name) == 0)
    {
        Session["adress"]=station.adress;
        break;
    } 
}
写出来的那一页是这样的

From station: @Session["searchFor"] <br />
From station adress: @Session["adress"] <br />

网站上也没有“fromstationaddress:Test”字样。

这段代码有很多改进。首先,
Session[“searchFor”].ToString()
实际上并没有做您认为它正在做的事情,它没有将“searchFor”键的值转换为字符串

下面是一个改进了很多的版本,它是任何编码语言中常见的最佳实践,也是C#中的一些常见模式。它包括正确拼写变量和C#类中的大写属性,以及处理字符串比较的潜在大小写敏感性

Session["searchFor"] = "Central";  //setting Session values for testing
//Session["address"] = null; there is no need for this.
var db = new Models.DB();

List<Models.Station> allStations = db.Station.ToList();
var searchForValue = (string) Session["searchFor"];
foreach (Station station in allStations)
{
    if (searchForValue.ToLower() == station.Name.ToLower())
    {
        Session["address"] = station.Address;
        break;
    }
}
Session[“searchFor”]=“Central”//为测试设置会话值
//会话[“地址”]=null;没有这个必要。
var db=new Models.db();
列出所有站点=db.Station.ToList();
var searchForValue=(字符串)会话[“searchFor”];
foreach(所有车站中的车站)
{
if(searchForValue.ToLower()==station.Name.ToLower())
{
会话[“地址”]=站点地址;
打破
}
}
下面是一个在C#中非常常见的使用LINQ的版本:

//setting Session values for testing
Session["searchFor"] = "Central";
var db = new Models.DB();

List<Models.Station> allStations = db.Station.ToList();
var searchForValue = (string) Session["searchFor"];
var station = allStations.FirstOrDefault(x => x.Name.ToLower() == searchForValue.ToLower());
if (station != null)
{
    Session["address"] = station.Address;
}
//为测试设置会话值
会话[“搜索”]=“中心”;
var db=new Models.db();
列出所有站点=db.Station.ToList();
var searchForValue=(字符串)会话[“searchFor”];
var station=allStations.FirstOrDefault(x=>x.Name.ToLower()==searchForValue.ToLower());
如果(站!=null)
{
会话[“地址”]=站点地址;
}

这里的“问题”是什么?运行此代码时会发生什么情况?C#区分大小写,并且
toString
不是
object
的有效方法。可能是,但显然你想要
如果((字符串)会话[“searchFor”]==station.name)
@Sach,问题是我什么也得不到。比较功能不起作用,会话为空。旁注:与其抓取所有电台并循环它们,为什么不在列表中使用
where
,只获取您需要的信息;然后你可以去掉其他的代码,你会。由于您发布的内容无法编译,我们无法为您进行编译。@revl是的,您在解释什么是问题以及什么不起作用方面做得很差
Session["searchFor"] = "Central";  //setting Session values for testing
//Session["address"] = null; there is no need for this.
var db = new Models.DB();

List<Models.Station> allStations = db.Station.ToList();
var searchForValue = (string) Session["searchFor"];
foreach (Station station in allStations)
{
    if (searchForValue.ToLower() == station.Name.ToLower())
    {
        Session["address"] = station.Address;
        break;
    }
}
//setting Session values for testing
Session["searchFor"] = "Central";
var db = new Models.DB();

List<Models.Station> allStations = db.Station.ToList();
var searchForValue = (string) Session["searchFor"];
var station = allStations.FirstOrDefault(x => x.Name.ToLower() == searchForValue.ToLower());
if (station != null)
{
    Session["address"] = station.Address;
}