Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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#_Wpf_Mvvm - Fatal编程技术网

C# 如何用更少的行数改进我的方法?

C# 如何用更少的行数改进我的方法?,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一个很好的方法,尽管我仍然在想,是否可以用更少的线来改进它。我已经在代码中直接用注释记录了这个方法,所以我想应该很清楚它是做什么的 我感谢你的每一个建议!提前谢谢 //FULL PROPERTY FOR BINDING IN VIEW.XAML private string _liederlisteAnzeige; public string LiederlisteAnzeige { get { return _liederlisteAnzeige;

我有一个很好的方法,尽管我仍然在想,是否可以用更少的线来改进它。我已经在代码中直接用注释记录了这个方法,所以我想应该很清楚它是做什么的

我感谢你的每一个建议!提前谢谢

//FULL PROPERTY FOR BINDING IN VIEW.XAML
private string _liederlisteAnzeige;
public string LiederlisteAnzeige
{
    get 
    { 
        return _liederlisteAnzeige; 
    }
    set 
    { 
        _liederlisteAnzeige = value;
        OnPropertyChanged();
    }
}

public void LiedEinfuegen()
{
    //CREATE A LIST OF CLASS LIED AND FILL WITH ACCESS-DATABASE TABLE
    Liederliste = new List<Lied>();
    Liederliste = AccessTabellen.GetAllTableData(connectionString, "SELECT * FROM " + AusgewaehlteTabelle.Tabellenname);

    //CREATE ANOTHER LIST AND FILL ONLY WITH PROPERTY LIEDERNUMMER OF LIST LIEDERLISTE BY LOOPING 
    List<string> LiederlisteLiedernamen = new List<string>();
    foreach (Lied lied in Liederliste)
    {
        if (lied.Liedernummer == AusgewaehltesLied.Liedernummer)
        {
            LiederlisteLiedernamen.Add(lied.Liedername);
        } 
    }

    //CREATE 3rd LIST TO REMOVE ALL DUPLICATES FROM LIST No2
    List<string> LiederlisteOhneDuplikate = new List<string>();
    LiederlisteOhneDuplikate = LiederlisteLiedernamen.Distinct().ToList();

    //LOOP THROUGH 3rd LIST AND CREATE A STRING (LIEDERLISTEANZEIGE) WITH STRINGBUILDER. THE STRING VARIABLE  WILL BE THEN BINDED TO VIEW.XAML CONTROL 
    StringBuilder sb = new StringBuilder();
    foreach (var item in LiederlisteOhneDuplikate)
    {
        sb.Append(item).AppendLine();
    }
    if (LiederlisteAnzeige == null)
    {
        LiederlisteAnzeige = sb.ToString();
    }
    else
    {
        LiederlisteAnzeige += sb.ToString();
    }

}
//VIEW.XAML中绑定的完整属性
私有字符串(liederlistenzeige);
公共字符串LiederListenzeige
{
得到
{ 
返回(liederlistenzeige);;
}
设置
{ 
_LiederListenzeige=值;
OnPropertyChanged();
}
}
公共无效LiedEinfuegen()
{
//创建类列表并填充ACCESS-DATABASE表
Liederliste=新列表();
Liederliste=AccessTabellen.GetAllTableData(connectionString,“选择*自”+AusgawehlteTabelle.Tabellenname);
//创建另一个列表并通过循环仅使用列表LIEDERLISTE的属性LIEDERNUMMER填充
List LIDERLISTELEDERNAMEN=新列表();
foreach(谎称Liederliste)
{
如果(lied.Liedernummer==Ausgawehlteslied.Liedernummer)
{
添加(lied.Liedername);
} 
}
//创建第三个列表以删除列表2中的所有重复项
List LIEDERLISTEOHNEDULPKATE=新列表();
LiederListeOhneduplekate=LiederlisteLiedernamen.Distinct().ToList();
//循环浏览第三个列表并使用STRINGBUILDER创建一个字符串(LiederListenzeige)。然后该字符串变量将绑定到VIEW.XAML控件
StringBuilder sb=新的StringBuilder();
foreach(LiederListedOhuplicate中的var项目)
{
sb.Append(item.AppendLine();
}
if(liederListenzeige==null)
{
LiederListenzeige=sb.ToString();
}
其他的
{
LiederListenzeige+=sb.ToString();
}
}
使用“更多”并帮助您做到这一点。这样就不需要编写太多foreach循环

public static void LiedEinfuegen()
{
    Liederliste = AccessTabellen.GetAllTableData(connectionString, "SELECT * FROM " + AusgewaehlteTabelle.Tabellenname);

    List<string> LiederlisteOhneDuplikate = Liederliste.Where(i => i.Liedernummer == AusgewaehltesLied.Liedernummer)
                                                    .Select(s => s.Liedername).Distinct().ToList();

    var calculatedString = String.Join(Environment.NewLine, LiederlisteOhneDuplikate);

    LiederlisteAnzeige = LiederlisteAnzeige == null ? calculatedString : (LiederlisteAnzeige + calculatedString);
}
public static void LiedEinfuegen()
{
Liederliste=AccessTabellen.GetAllTableData(connectionString,“选择*自”+AusgawehlteTabelle.Tabellenname);
列出LiederListeOhneduplekate=Liederliste.Where(i=>i.Liedernummer==Ausgawehlted.Liedernummer)
.Select(s=>s.Liedername).Distinct().ToList();
var calculatedString=String.Join(Environment.NewLine,liederlistohneduplekate);
LiederListenzeige=LiederListenzeige==null?calculatedString:(LiederListenzeige+calculatedString);
}

实际上可以稍微短一点,因为可以使用linq删除中间列表

请注意,动态查询可能容易受到sql注入攻击。除非在代码中编译了
选项卡lenname
属性,否则我不会在select查询中使用该属性

public void LiedEinfuegen()
{
    StringBuilder sb = new StringBuilder();

    // Use linq to iterate over the list with the filters inline, that way you dont't need to initialize intermediate lists.
    foreach (var item in AccessTabellen.GetAllTableData(connectionString, "SELECT * FROM " + AusgewaehlteTabelle.Tabellenname)
        .Where(l => l.Liedernummer == AusgewaehltesLied.Liedernummer)
        .Distinct())
    {
        sb.AppendLine(item);
    }

    // If you initialize LiederlisteAnzeige with an empty string "", you don't need the if null check.
    LiederlisteAnzeige += sb.ToString();
}
编辑: 如果你把它和Selim的结合起来,你可以在一行中完成这件事,但是,它会稍微影响可读性:

LiederlisteAnzeige += string.Join(
    Environment.NewLine, 
    AccessTabellen.GetAllTableData(connectionString, "SELECT * FROM " + AusgewaehlteTabelle.Tabellenname)
        .Where(l => l.Liedernummer == AusgewaehltesLied.Liedernummer)
        .Select(s => s.Liedername)
        .Distinct());

减少某些行的最快方法是不要将列表初始化为空列表,然后再次分配它们。您可以安全地删除行
Liederliste=newlist()。这就是说,少行并不总是最好的——有时,多行代码会使代码更易于阅读和维护。请参阅软件工程堆栈交换站点。谢谢!这将是我的下一个问题:你能给我一个‘更多行==更容易阅读和维护’的例子吗:-)<代码>someobject.doSomething(someSingleton.getInstance().with().a().lot().of().law().of().demeter().violations())和().if().that().werent().Though().theres().more()从第二个答案中窃取。这只是一个(荒谬的)例子,但它强调了分隔成更多行如何使事情更可读、更易于调试等。如果您在web上搜索代码可读性和维护这一主题,我想您会找到很多资源。嗨,Jesse,谢谢您的linq声明。不知道已经可以将其包含到foreach循环中。太棒了!您假设还需要设置Liederliste属性。为什么要这样做?作为view.xaml中的绑定属性,我猜?!“在这种情况下,它是不需要的……”罗伯特更新了我的答案。如果不需要
Liederliste
属性,可以将其全部放在一条语句中。这行代码看起来很棒,但它不是每次循环都访问数据库吗?我认为这会降低性能,不是吗?不,该查询只执行一次。嗨,Selim,我非常喜欢你的代码->少打字。在这方面我很懒。谢谢!不客气。如果它对您有帮助,请将答案标记为已接受,以便帮助其他人。