C# 类作为参数
在我的函数中,我硬编码了一个JSON类(称为ExperienceLevel)的名称。请原谅这个术语,但这是JSONMain类的一个子级别(即JSONMain有一个ExperienceLevel的get/set)。它按预期运行 但是,我希望修改函数,将任何“子”类的名称作为函数的参数传递。除了经验层面,我还有其他的。当然,我还想为这些“子”类中的任何一个指定属性(字段名) 声明是否可以接受类C# 类作为参数,c#,class,parameters,C#,Class,Parameters,在我的函数中,我硬编码了一个JSON类(称为ExperienceLevel)的名称。请原谅这个术语,但这是JSONMain类的一个子级别(即JSONMain有一个ExperienceLevel的get/set)。它按预期运行 但是,我希望修改函数,将任何“子”类的名称作为函数的参数传递。除了经验层面,我还有其他的。当然,我还想为这些“子”类中的任何一个指定属性(字段名) 声明是否可以接受类 private List<string> FillComboBoxUsingPHP(strin
private List<string> FillComboBoxUsingPHP(string PHPfile, string fieldNameToRetrieve, ComboBox cmbBoxName)
这似乎是
泛型的情况
使用下面的代码,您可以将类作为泛型参数传递,然后在方法体中询问传递的参数并相应地进行处理
private List<string> FillComboBoxUsingPHP<T>(string PHPfile, string fieldNameToRetrieve, ComboBox cmbBoxName) where T: JSONMain
{
cmbBoxName.Items.Clear();
List<String> results = new List<String>();
string submitLink =
PhpURLStringBuilder(serverURL, PHPfile);
string result = PostData(submitLink);
T JSONMainResponse = JsonConvert.DeserializeObject<T>(result);
if (JSONMainResponse is JSONMain jsonMain)
{
string success = jsonMain.Success;
string msg = jsonMain.Msg;
List<ExperienceLevel> data = jsonMain.ExperienceLevel;
foreach (ExperienceLevel ep in data)
{
results.Add(ep.ExperienceName);
}
return results;
}
//next types
}
private List FillComboBoxUsingPHP(字符串PHPfile,字符串fieldnametorerieve,组合框cmboxName),其中T:JSONMain
{
cmboxname.Items.Clear();
列表结果=新列表();
字符串提交链接=
PhpURLStringBuilder(serverURL,PHPfile);
字符串结果=PostData(submitLink);
T JSONMainResponse=JsonConvert.DeserializeObject(结果);
if(JSONMainResponse是JSONMain JSONMain)
{
字符串success=jsonMain.success;
字符串msg=jsonMain.msg;
列表数据=jsonMain.ExperienceLevel;
foreach(数据中的体验级ep)
{
结果。添加(ep.ExperienceName);
}
返回结果;
}
//下一类
}
如果我理解正确,您正试图获取JSONMain对象中的一个或另一个属性,这取决于您还没有的输入参数。这是一个我在没有深入了解的情况下所做的模拟
// call it like this
FillComboBoxUsingPHP("", "", null, x => x.ExperienceLevel, x => x.ExperienceName);
private List<string> FillComboBoxUsingPHP<T>(string PHPfile,
string fieldNameToRetrieve,
ComboBox cmbBoxName,
Func<JSONMain, List<T>> dataAccess,
Func<T, string> propAccess)
{
cmbBoxName.Items.Clear();
List<String> results = new List<String>();
string submitLink =
PhpURLStringBuilder(serverURL, PHPfile);
string result = PostData(submitLink);
JSONMain JSONMainResponse = JsonConvert.DeserializeObject<JSONMain>(result);
string success = JSONMainResponse.Success;
string msg = JSONMainResponse.Msg;
List<T> data = dataAccess.Invoke(JSONMainResponse);
foreach (T ep in data)
{
results.Add(propAccess.Invoke(ep));
}
return results;
}
//这样称呼它
FillComboBoxUsingPHP(“,”,null,x=>x.ExperienceLevel,x=>x.ExperienceName);
私有列表FillComboBoxUsingPHP(字符串PHPfile,
字符串字段名检索,
组合框名称,
Func数据访问,
函数(访问)
{
cmboxname.Items.Clear();
列表结果=新列表();
字符串提交链接=
PhpURLStringBuilder(serverURL,PHPfile);
字符串结果=PostData(submitLink);
JSONMain JSONMainResponse=JsonConvert.DeserializeObject(结果);
字符串success=JSONMainResponse.success;
字符串msg=JSONMainResponse.msg;
List data=dataAccess.Invoke(JSONMainResponse);
foreach(数据中的TEP)
{
results.Add(propass.Invoke(ep));
}
返回结果;
}
您可能需要泛型类JSONMain{public List Data{get;set;}
谢谢,我刚刚意识到这不起作用,因为有一个更根本的问题。我的JSON响应“Data”部分可以是TechProfile或ExperienceLevel类型。我需要先考虑如何处理它。
public partial class JSONMain
{
[JsonProperty("success")]
public string Success { get; set; }
[JsonProperty("msg")]
public string Msg { get; set; }
[JsonProperty("data")]
public List<TechProfile> Data { get; set; }
[JsonProperty("ExperienceLevel")]
public List<ExperienceLevel> ExperienceLevel { get; set; }
}
public partial class ExperienceLevel
{
[JsonProperty("ExperienceId")]
public string ExperienceId { get; set; }
[JsonProperty("ExperienceName")]
public string ExperienceName { get; set; }
}
private List<string> FillComboBoxUsingPHP<T>(string PHPfile, string fieldNameToRetrieve, ComboBox cmbBoxName) where T: JSONMain
{
cmbBoxName.Items.Clear();
List<String> results = new List<String>();
string submitLink =
PhpURLStringBuilder(serverURL, PHPfile);
string result = PostData(submitLink);
T JSONMainResponse = JsonConvert.DeserializeObject<T>(result);
if (JSONMainResponse is JSONMain jsonMain)
{
string success = jsonMain.Success;
string msg = jsonMain.Msg;
List<ExperienceLevel> data = jsonMain.ExperienceLevel;
foreach (ExperienceLevel ep in data)
{
results.Add(ep.ExperienceName);
}
return results;
}
//next types
}
// call it like this
FillComboBoxUsingPHP("", "", null, x => x.ExperienceLevel, x => x.ExperienceName);
private List<string> FillComboBoxUsingPHP<T>(string PHPfile,
string fieldNameToRetrieve,
ComboBox cmbBoxName,
Func<JSONMain, List<T>> dataAccess,
Func<T, string> propAccess)
{
cmbBoxName.Items.Clear();
List<String> results = new List<String>();
string submitLink =
PhpURLStringBuilder(serverURL, PHPfile);
string result = PostData(submitLink);
JSONMain JSONMainResponse = JsonConvert.DeserializeObject<JSONMain>(result);
string success = JSONMainResponse.Success;
string msg = JSONMainResponse.Msg;
List<T> data = dataAccess.Invoke(JSONMainResponse);
foreach (T ep in data)
{
results.Add(propAccess.Invoke(ep));
}
return results;
}