Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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# 获取值或返回null_C#_Return - Fatal编程技术网

C# 获取值或返回null

C# 获取值或返回null,c#,return,C#,Return,我有一个方法,可以在html文档中搜索一个值,如果找到一个项目((“settingsings”),则返回该值。 但是如果找不到元素((“设置”),则循环退出。 我希望如果找不到该项,则CurrentProfileDLS设置为null private string CopyProfileDLS_Intercept_AddPhone_Unify(string CurrentProfileDLS) { var elmC = web_Browser.Document.GetElementsByT

我有一个方法,可以在html文档中搜索一个值,如果找到一个项目((“settingsings”),则返回该值。 但是如果找不到元素((“设置”),则循环退出。 我希望如果找不到该项,则CurrentProfileDLS设置为null

private string CopyProfileDLS_Intercept_AddPhone_Unify(string CurrentProfileDLS)
{
    var elmC = web_Browser.Document.GetElementsByTagName("select");
    foreach (HtmlElement elm in elmC)
    {
        if (elm.Id == "DLSProf")
        {
            if (elm.InnerText.Contains("settings"))
            {
                CurrentProfileDLS = elm.GetAttribute("value");
            }
        }
    }
    return CurrentProfileDLS;
}
我尝试过,但CurrentProfileDLS变量未设置为null:

private string CopyProfileDLS_Intercept_AddPhone_Unify(string CurrentProfileDLS)
{
    var elmC = web_Browser.Document.GetElementsByTagName("select");
    foreach (HtmlElement elm in elmC)
    {
        if (elm.Id == "DLSProf")
        {
            if (elm.InnerText.Contains("settings"))
            {
                CurrentProfileDLS = elm.GetAttribute("value");
            }
            return CurrentProfileDLS;
        }
    }
    return null;
}

如何修复它?

您只需将
CurrentProfileDLS
初始设置为null

private string CopyProfileDLS_Intercept_AddPhone_Unify(string CurrentProfileDLS)
{
    CurrentProfileDLS = null;
    var elmC = web_Browser.Document.GetElementsByTagName("select");
    foreach (HtmlElement elm in elmC)
    {
        if (elm.Id == "DLSProf")
        {
            if (elm.InnerText.Contains("settings"))
            {
                CurrentProfileDLS = elm.GetAttribute("value");
            }
            break;
        }
    }
    return CurrentProfileDLS;
}
我不理解参数
CurrentProfileDLS
的用途。如果它除了存储
CurrentProfileDLS=elm.GetAttribute(“value”)中的值之外没有其他用途,我建议您删除它


您只需将
CurrentProfileDLS
初始设置为null

private string CopyProfileDLS_Intercept_AddPhone_Unify(string CurrentProfileDLS)
{
    CurrentProfileDLS = null;
    var elmC = web_Browser.Document.GetElementsByTagName("select");
    foreach (HtmlElement elm in elmC)
    {
        if (elm.Id == "DLSProf")
        {
            if (elm.InnerText.Contains("settings"))
            {
                CurrentProfileDLS = elm.GetAttribute("value");
            }
            break;
        }
    }
    return CurrentProfileDLS;
}
我不理解参数
CurrentProfileDLS
的用途。如果它除了存储
CurrentProfileDLS=elm.GetAttribute(“value”)中的值之外没有其他用途,我建议您删除它


您正在传入一个要设置(或为空)的值,但未使用参数上的
Out
修饰符。如果不知道您传递CurrentProfileDLS的确切原因,我建议对

private string CopyProfileDLS_Intercept_AddPhone_Unify()
{
    string CurrentProfileDLS = null;
    var elmC = web_Browser.Document.GetElementsByTagName("select");
    foreach (HtmlElement elm in elmC)
    {
        if (elm.Id == "DLSProf")
        {
            if (elm.InnerText.Contains("settings"))
            {
                CurrentProfileDLS = elm.GetAttribute("value");
            }
        }
    }
    return CurrentProfileDLS;
}

通过这种方式,您将字段初始化为null并在末尾返回它,而不管它是否被
elm.GetAttribute(“value”)覆盖

您正在传入一个要设置(或为空)的值,但未使用参数上的
Out
修饰符。如果不知道您传递CurrentProfileDLS的确切原因,我建议对

private string CopyProfileDLS_Intercept_AddPhone_Unify()
{
    string CurrentProfileDLS = null;
    var elmC = web_Browser.Document.GetElementsByTagName("select");
    foreach (HtmlElement elm in elmC)
    {
        if (elm.Id == "DLSProf")
        {
            if (elm.InnerText.Contains("settings"))
            {
                CurrentProfileDLS = elm.GetAttribute("value");
            }
        }
    }
    return CurrentProfileDLS;
}

通过这种方式,您将字段初始化为null并在末尾返回它,而不管它是否被
elm.GetAttribute(“value”)覆盖

似乎根本不需要
CurrentProfileDLS
。为什么不直接根据结果返回呢

private string CopyProfileDLS_Intercept_AddPhone_Unify()
{
    var elmC = web_Browser.Document.GetElementsByTagName("select");
    var elm = elmC.FirstOrDefault(e => e.Id == "DLSProf" && e.InnerText.Contains("Settings"));

    return elm?.GetAttribute("value");
}
您的原始帖子允许循环继续查找匹配项,使其行为类似于“最后一次获胜”,因此如果仍然需要,您可以将这一行更改为:

var elm = elmC.LastOrDefault(e => e.Id == "DLSProf" && e.InnerText.Contains("Settings"));

CurrentProfileDLS
似乎根本不需要。为什么不直接根据结果返回呢

private string CopyProfileDLS_Intercept_AddPhone_Unify()
{
    var elmC = web_Browser.Document.GetElementsByTagName("select");
    var elm = elmC.FirstOrDefault(e => e.Id == "DLSProf" && e.InnerText.Contains("Settings"));

    return elm?.GetAttribute("value");
}
您的原始帖子允许循环继续查找匹配项,使其行为类似于“最后一次获胜”,因此如果仍然需要,您可以将这一行更改为:

var elm = elmC.LastOrDefault(e => e.Id == "DLSProf" && e.InnerText.Contains("Settings"));

您只想在实际设置变量时返回。为什么要传入
(string CurrentProfileDLS)
?你哪儿都不用。它不是
ref
out
参数,因此不返回其值,字符串是不可变的,因此更改方法中的值不会更改调用方法的变量。这完全是多余的。这个问题有正确的答案。但我在这里看到一种代码味道:我想CurrentProfileDLS是一个类字段。因此,这种方法违反了命令查询原则。我建议做一点重构,它会更具可读性,而且你不会再有这样的问题了。@John是对的。如果要将其设置为null。您必须这样做:
CurrentProfileDLS=CopyProfileDLS\u Intercept\u AddPhone\u Unify(CopyProfileDLS\u Intercept\u AddPhone\u Unify(CurrentProfileDLS))
但正如@AliDoustkani所建议的,重构可能会更好,您只希望在实际设置变量时返回。为什么要传入
(字符串CurrentProfileDLS)
?你哪儿都不用。它不是
ref
out
参数,因此不返回其值,字符串是不可变的,因此更改方法中的值不会更改调用方法的变量。这完全是多余的。这个问题有正确的答案。但我在这里看到一种代码味道:我想CurrentProfileDLS是一个类字段。因此,这种方法违反了命令查询原则。我建议做一点重构,它会更具可读性,而且你不会再有这样的问题了。@John是对的。如果要将其设置为null。您必须这样做:
CurrentProfileDLS=CopyProfileDLS\u Intercept\u AddPhone\u unified(CopyProfileDLS\u Intercept\u AddPhone\u unified(CurrentProfileDLS))
但正如@AliDoustkani所建议的,您最好进行重构