C# 将if子句合并到linq中
我正在开发一个函数,它读取文本文件中的URL,更新链接,然后将数据写回 读完这行后,我找到第三个“/”,从链接中切掉剩余的字符,然后将列表区分开来。理论上,这应该是一个子域列表 但是,我想检查该行是否不是空的,是否存在第三个“/”。如果不是,IndexofNth将返回-1 我正在努力找出如何最好地将这种逻辑整合到我所拥有的东西中,或者整合到一个不同的结构中C# 将if子句合并到linq中,c#,asp.net,linq,C#,Asp.net,Linq,我正在开发一个函数,它读取文本文件中的URL,更新链接,然后将数据写回 读完这行后,我找到第三个“/”,从链接中切掉剩余的字符,然后将列表区分开来。理论上,这应该是一个子域列表 但是,我想检查该行是否不是空的,是否存在第三个“/”。如果不是,IndexofNth将返回-1 我正在努力找出如何最好地将这种逻辑整合到我所拥有的东西中,或者整合到一个不同的结构中 protected void Page_Load(object sender, EventArgs e) {
protected void Page_Load(object sender, EventArgs e)
{
var fileName = @"c:\badlinks.txt";
List<string> urls = File.ReadAllLines(fileName).ToList();
urls = urls
.Select(x =>
x.Replace(x, x.Substring(0, IndexOfNth(x, '/', 3))))
.Distinct()
.ToList();
File.WriteAllLines(fileName, urls);
}
受保护的无效页面加载(对象发送方,事件参数e)
{
var fileName=@“c:\badlinks.txt”;
List url=File.ReadAllLines(fileName.ToList();
URL=URL
.选择(x=>
x、 替换(x,x.Substring(0,IndexOfNth(x,“/”,3)))
.Distinct()
.ToList();
writeAllines(文件名、URL);
}
提前感谢。在进行字符串输入之前过滤列表
urls = urls
.Where(x => x.Length > 0)
.Select(x => x.Substring(0, IndexOfNth(x, '/', 3) > -1 ? x.Replace(x, x.Substring(0, IndexOfNth(x, '/', 3))) : x)
.Distinct()
.ToList();
将逻辑转移到新方法以保持代码干净是一个明智的想法
urls = urls
.Where(x => x.Length > 0)
.Select(x => ManinpulateMyUrl(x))
.Distinct()
.ToList();
private string ManipulateMyUrl(string url) {
var index = IndexOfNth(x, '/', 3);
if (index == -1) return url;
return url.Substring(0, IndexOfNth(x, '/', 3);
}
这应该会有所帮助
urls = urls
.Where(x => !string.IsNullOrWhiteSpace(x))
.Select(x =>IndexOfNth(x, '/', 3)<0?
x:
x.Replace(x, x.Substring(0, IndexOfNth(x, '/', 3))))
.Distinct()
.ToList();
url=url
.Where(x=>!string.IsNullOrWhiteSpace(x))
.选择(x=>IndexOfNth(x,“/”,3)您想筛选不为null且至少有三个/
的项目,或者您想对每个项目执行if else
操作?如果行为空,我们无法对其执行任何操作,因此希望忽略它,如果没有第三个/,则它已经是子域,而不是内部页面,因此我们希望保留原始的stringIfIndexOfNth
是一个自定义方法,Linq不会执行它。它无法将它解析为Sql。@AndreiV文件。ReadAllLines
不是Sql操作。@Mathew,我没有说过文件。ReadAllLines
@Marko JuvančIč-Marko,不太清楚。这是我在上面发布的解释:如果这行是空的,我们就不能用它做任何事情,所以我想这样做忽略它,如果没有3rd/,那么它已经是一个子域,而不是一个内部页面,所以我们希望保留原始字符串。不管怎样,伙计们,它按原样工作,只是不做所有需要的事情。
urls = urls
.Where(x => !string.IsNullOrWhiteSpace(x))
.Select(x =>IndexOfNth(x, '/', 3)<0?
x:
x.Replace(x, x.Substring(0, IndexOfNth(x, '/', 3))))
.Distinct()
.ToList();