C# 在c语言中直接将数据分配给属性和静态属性#
我有一个如下的方法,它获取数据并将它们存储到特定的变量中。我还有两个静态变量,如果满足条件,它们会保留它们的值。我的问题是如何将这些数据存储在特定类的属性中 例如,我有一个名为C# 在c语言中直接将数据分配给属性和静态属性#,c#,C#,我有一个如下的方法,它获取数据并将它们存储到特定的变量中。我还有两个静态变量,如果满足条件,它们会保留它们的值。我的问题是如何将这些数据存储在特定类的属性中 例如,我有一个名为UserDetails的类,它具有以下属性: 用户详细信息类 public class UserDetails { public static string RateCountry { get; set; } public static string RateWeek { get; set; } p
UserDetails
的类,它具有以下属性:
用户详细信息类
public class UserDetails {
public static string RateCountry { get; set; }
public static string RateWeek { get; set; }
public int Start { get; set; }
public int Length { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
二等舱
现在,它是这样工作的。但我想通过使用对象来增强它
public static string RateCountry { get; private set; }
public static string RateWeek { get; private set; }
public ActionResult ShowList()
{
int start = Convert.ToInt32(Request["start"]);
int length = Convert.ToInt32(Request["length"]);
string name = Request["search[value]"];
string address = Request[("columns[3][search][value]")];
string rateType = Request[("columns[7][search][value]")];
if (string.IsNullOrEmpty(rateType)) // if null, reset the static variables to null
{
RateCountry = "";
RateWeek = "";
}
else
{
if (CheckDate(rateType)) // if contains date, assign to RateWeek
{
RateWeek = rateType;
}
else
{
RateCountry = rateType; // else if contains a string word, assing to ratecountry
}
}
var items = AssignDetails(start, length, name, address, RateWeek, RateCountry);
return items;
}
然后,在方法AssignDetails
中,我可以直接将静态变量考虑在内,传递UserDetails
类的对象,而不是传递几个参数,如start、length、name
等
有人能帮忙吗?注意:在C#中,它们被称为属性而不是属性。这是完全不同的事情
你想做的是直截了当的:
首先,您需要更改方法,使其接受类UserDetails
作为参数:
public void AssignDetails(UserDetails userDetails)
{
// Use userDetails here to do whatever you want
}
其次,当调用上述方法时,需要将参数传递给它。您可以创建UserDetails
的实例,并将其传递给AssignDetails
方法:
var userDetails = new UserDetails
{
Start = start,
Length = length,
Name = name
Address = address
}
我不知道为什么RateWeek
和ratecontry
属性在您的类中是static
,但要设置这些属性,您可以按如下方式进行设置(请注意,它使用的是类而不是类的实例):
您可以使用实例的属性作为类的静态属性的间接寻址,尽管所有这些在设计方面都非常糟糕
public class UserDetails
{
public static string PersistedRateCountry { get; set; }
public static string PersistedRateWeek { get; set; }
public static string RateCountry
{
get { return string.IsNullOrEmpty(rateType) ? "" : PersistedRateCountry; }
set { PersistedRateCountry = value; }
}
public static string RateWeek
{
get { return string.IsNullOrEmpty(rateType) ? "" : PersistedRateWeek; }
set { PersistedRateWeek= value; }
}
public static string RateWeek { get; set; }
public int Start { get; set; }
public int Length { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
我强烈建议您将这些静态属性移到另一个类中,该类将负责持久化它们
例如,尝试将数据对象(仅保存数据)与业务对象(包含业务逻辑,通过接收数据对象作为参数来构造)分离。将所有疯狂的持久化逻辑放在业务对象中,并在代码中的任何地方使用业务对象(而不是使用数据对象)
保持你的课堂简短整洁。如果您在同一个类中编写了很多代码,可能是因为您的面向对象设计不好。您真正想做什么?我认为它不是clearproperties,不是attribute。他们的意思和你想的不一样,是的。对不起。@Aria:我想利用对象。像
UserDetails user=newuserdetails{Start=Convert.ToInt32(Request[“Start”]),}
“我想通过使用对象来增强它”——将静态成员移动到其他类型不会增强任何功能。静态成员与“使用对象”相反。我将它们用作静态成员以保持其值。与此方法的第一次执行类似,返回true::if(CheckDate(rateType))//如果包含日期,则分配给RateWeek{RateWeek=rateType;}第二次执行时,上述结果不为true,但是我想保留它第一次执行时的值。如何将UserDetails.RateWeek
传递到AssignDetails(UserDetails)
您不需要传递它。因为它是静态的
,所以您可以从任何地方访问它。因此,在AssignDetails
方法中,您只需像这样访问它:UserDetails.RateWeek
。您需要确定静态是如何工作的,否则您将陷入麻烦。您所说的第一次执行是什么意思?它是对ShowList()
的ajax调用。在第一次执行时,我得到了2018年3月12日的rateType
。在第二次执行时,即当我点击一个选项值组件时,我得到rateType
值作为ARA
。所以我想保留12/03/2018
的值。好的,那么你应该没事了。请注意,static
内容,例如UserDetails.RateWeek
将一直保持这种状态,直到您更改它或重新启动应用程序池。
public class UserDetails
{
public static string PersistedRateCountry { get; set; }
public static string PersistedRateWeek { get; set; }
public static string RateCountry
{
get { return string.IsNullOrEmpty(rateType) ? "" : PersistedRateCountry; }
set { PersistedRateCountry = value; }
}
public static string RateWeek
{
get { return string.IsNullOrEmpty(rateType) ? "" : PersistedRateWeek; }
set { PersistedRateWeek= value; }
}
public static string RateWeek { get; set; }
public int Start { get; set; }
public int Length { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}