C# 获取值或返回null
我有一个方法,可以在html文档中搜索一个值,如果找到一个项目((“settingsings”),则返回该值。 但是如果找不到元素((“设置”),则循环退出。 我希望如果找不到该项,则CurrentProfileDLS设置为nullC# 获取值或返回null,c#,return,C#,Return,我有一个方法,可以在html文档中搜索一个值,如果找到一个项目((“settingsings”),则返回该值。 但是如果找不到元素((“设置”),则循环退出。 我希望如果找不到该项,则CurrentProfileDLS设置为null private string CopyProfileDLS_Intercept_AddPhone_Unify(string CurrentProfileDLS) { var elmC = web_Browser.Document.GetElementsByT
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所建议的,您最好进行重构