Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类作为参数_C#_Class_Parameters - Fatal编程技术网

C# 类作为参数

C# 类作为参数,c#,class,parameters,C#,Class,Parameters,在我的函数中,我硬编码了一个JSON类(称为ExperienceLevel)的名称。请原谅这个术语,但这是JSONMain类的一个子级别(即JSONMain有一个ExperienceLevel的get/set)。它按预期运行 但是,我希望修改函数,将任何“子”类的名称作为函数的参数传递。除了经验层面,我还有其他的。当然,我还想为这些“子”类中的任何一个指定属性(字段名) 声明是否可以接受类 private List<string> FillComboBoxUsingPHP(strin

在我的函数中,我硬编码了一个JSON类(称为ExperienceLevel)的名称。请原谅这个术语,但这是JSONMain类的一个子级别(即JSONMain有一个ExperienceLevel的get/set)。它按预期运行

但是,我希望修改函数,将任何“子”类的名称作为函数的参数传递。除了经验层面,我还有其他的。当然,我还想为这些“子”类中的任何一个指定属性(字段名)

声明是否可以接受类

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;
    }