在我的common.cs类中,我对基于类的列表进行了以下声明:
public static List<edbService> edb_service;
public class edbService
{
public string ServiceID { get; set; }
public string ServiceName { get; set; }
public string ServiceDescr { get; set; }
public string ServiceInterval { get; set; }
public string ServiceStatus { get; set; }
public string ServiceUrl { get; set; }
public string SourceApplication { get; set; }
public string DestinationApplication { get; set; }
public string Function { get; set; }
public string Version { get; set; }
public string userid { get; set; }
public string credentials { get; set; }
public string orgid { get; set; }
public string orgunit { get; set; }
public string customerid { get; set; }
public string channel { get; set; }
public string ip { get; set; }
}
我有一个公共方法来填充同一类(common.cs)中声明为这样的xml数据文件的列表:
#region PublicMethods
public List<edbService> populateEDBService(string xmlDataFile)
{
try
{
XElement x = XElement.Load(global::EvryCardManagement.Properties.Settings.Default.DataPath + xmlDataFile);
// Get global settings
IEnumerable<XElement> services = from el in x.Descendants("Service")
select el;
if (services != null)
{
edb_service = new List<edbService>();
foreach (XElement srv in services)
{
edbService edbSrv = new edbService();
edbSrv.ServiceID = srv.Element("ServiceID").Value;
edbSrv.ServiceName = srv.Element("ServiceName").Value;
edbSrv.ServiceDescr = srv.Element("ServiceDescr").Value;
edbSrv.ServiceInterval = srv.Element("ServiceInterval").Value;
edbSrv.ServiceStatus = srv.Element("ServiceStatus").Value;
edbSrv.ServiceUrl = srv.Element("ServiceUrl").Value;
foreach (XElement ServiceHeader in srv.Elements("ServiceHeader"))
{
edbSrv.SourceApplication = ServiceHeader.Element("SourceApplication").Value;
edbSrv.DestinationApplication = ServiceHeader.Element("DestinationApplication").Value;
edbSrv.Function = ServiceHeader.Element("Function").Value;
edbSrv.Version = ServiceHeader.Element("Version").Value;
foreach (XElement ClientContext in ServiceHeader.Elements("ClientContext"))
{
edbSrv.userid = ClientContext.Element("userid").Value;
edbSrv.credentials = ClientContext.Element("credentials").Value;
edbSrv.orgid = ClientContext.Element("orgid").Value;
edbSrv.orgunit = ClientContext.Element("orgunit").Value;
edbSrv.customerid = ClientContext.Element("customerid").Value;
edbSrv.channel = ClientContext.Element("channel").Value;
edbSrv.ip = ClientContext.Element("ip").Value;
}
}
edb_service.Add(edbSrv);
}
}
}
catch (Exception ex)
{
/* Write to log */
Common.logBuilder("CustomerCreate : Form --> CustomerCreate <--", "Exception", Common.ActiveMQ,
ex.Message, "Exception");
/* Send email to support */
emailer.exceptionEmail(ex);
}
return edb_service;
}
但问题是,在我的调用类中,当我尝试从此方法返回一个列表时,找不到它 - 我得到一个编译错误,需要一个对象引用。
我试着这样称呼它:
Common.edbService edb_service = Common.populateEDBService(“CardUpdate.xml”);
我收到以下错误:
非静态字段,方法或属性'EvryCardManagement.Common.populateEDBService(string)'
需要对象引用
我做错了什么?
我想有一个可以从几个类调用的泛型方法(在我的表单上由后台工作程序实例化后运行异步)
答案 0 :(得分:1)
您需要创建类static
,或创建一个对象来调用它。
class edbService { }
public static void Main() {
//this is error
edbService.populateEDBService("");
//this is correct
edbService s = new edbService();
s.populateEDBService("");
}
我的示例中的最后一行显示了编译器所需的对象引用。这里的s
变量是对象引用。
答案 1 :(得分:1)
您的XML中是否有任何缺失值?如果缺少值,.Value
属性将不起作用。因此,如果缺少ServiceID,则srv.Element("ServiceID").Value;
将导致错误。您可以让它返回空字符串以查找缺失值,例如,使用(string)srv.Element("ServiceID");
答案 2 :(得分:1)
您可以尝试将方法设为静态。
public static List<edbService> populateEDBService(string xmlDataFile)
{
//Your code here
....
}
现在,您可以使用common.populateEDBService();